linux打包固件shell腳本

  1. 不打包?pack.sh

  2. 解壓后無父目錄(直接是文件)

  3. 生成?checksum.txt(包含所有文件的 SHA256)

  4. 打包后?.tar.gz?移動到上級目錄

#!/bin/bash# 檢查是否傳入版本號參數
if [ -z "$1" ]; thenecho "Usage: $0 <version> (e.g. v1.0.1)"exit 1
fiVERSION="$1"
TAR_NAME="dtu_sdk_demo_${VERSION}.tar.gz"
CHECKSUM_FILE="checksum.txt"# 1. 生成 checksum.txt(排除 pack.sh 和自身)
echo "Generating ${CHECKSUM_FILE}..."
find . -type f ! -name "${CHECKSUM_FILE}" ! -name "pack.sh" ! -name "${TAR_NAME}" -exec sha256sum {} + > "${CHECKSUM_FILE}"# 2. 打包當前目錄所有文件(排除 pack.sh 和壓縮包自身)
echo "Creating ${TAR_NAME}..."
tar -czvf "${TAR_NAME}" \--transform="s|^./||" \--exclude="pack.sh" \--exclude="${TAR_NAME}" .# 3. 將壓縮包移動到上級目錄
echo "Moving ${TAR_NAME} to parent directory..."
mv "${TAR_NAME}" ../echo "Package created successfully: ../${TAR_NAME}"

關鍵步驟:

  1. 固定排除?pack.sh

    • 直接在?find?和?tar?命令中硬編碼?--exclude="pack.sh",避免動態獲取腳本名可能帶來的問題。

  2. 仍然排除?checksum.txt?自身和壓縮包

    • 確保校驗文件不包含自己,且不會重復打包已生成的?.tar.gz

  3. --transform="s|^./||"

    • 確保解壓后直接是文件,沒有父目錄層級。

使用方式

chmod +x pack.sh
./pack.sh v1.0.1

適用場景

  • 嚴格排除?pack.sh:避免動態獲取腳本名可能導致的意外問題。

  • 干凈打包:解壓后直接是文件,適合 SDK/軟件發布。

  • 校驗文件完整checksum.txt?確保文件未被篡改。

如果需要排除更多文件(如?.gitignore、臨時文件等),可在?find?和?tar?命令中添加?--exclude

===========================校驗方法======================================

以下是一個?check.sh?腳本的實現,它可以對?checksum.txt?中記錄的文件進行校驗,打印校驗結果,并將校驗結果寫入?checksum.log?文件。

#!/bin/bash# 定義 checksum.txt 文件的路徑
checksum_file="checksum.txt"# 定義日志文件的路徑
log_file="checksum.log"# 執行校驗操作,并將結果同時輸出到終端和日志文件
echo "開始校驗文件..." | tee -a $log_file
sha256sum -c $checksum_file 2>&1 | tee -a $log_file# 檢查校驗結果是否有失敗的情況
if [ $? -eq 0 ]; thenecho "所有文件校驗成功!" | tee -a $log_file
elseecho "部分文件校驗失敗,請檢查!" | tee -a $log_file
fi

腳本說明:

  1. 腳本頭部#!/bin/bash?聲明這是一個 Bash 腳本。
  2. 變量定義
    • checksum_file:指定?checksum.txt?文件的路徑,這里假設它與腳本在同一目錄下。
    • log_file:指定日志文件的路徑,同樣假設與腳本在同一目錄下。
  3. 執行校驗操作
    • sha256sum -c $checksum_file:執行校驗操作。
    • 2>&1:將標準錯誤輸出重定向到標準輸出,這樣所有的輸出都會被捕獲。
    • tee -a $log_file:將輸出同時輸出到終端和日志文件中,-a?選項表示追加到文件末尾。
  4. 檢查校驗結果
    • $?:表示上一個命令的退出狀態碼。如果為 0,則表示所有文件校驗成功;否則,表示部分文件校驗失敗。
    • 根據退出狀態碼輸出相應的提示信息,并將信息同時輸出到終端和日志文件中。

使用方法:

  1. 將上述腳本保存為?check.sh?文件。
  2. 給腳本添加執行權限:
chmod +x check.sh
  1. 運行腳本:
./check.sh

運行腳本后,你可以在終端看到校驗結果,同時校驗結果也會被記錄到?checksum.log?文件中。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/89071.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/89071.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/89071.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

用uniapp開發鴻蒙應用(暫停更新-根據項目更新,現在項目未開始)

1.根據博客生成.hap文件 【鴻蒙HarmonyOS開發技巧&#xff1a;如何不依賴華為商店直接安裝uniapp生成的app文件&#xff1f;一鍵轉換app至hap格式教程詳解】_entry-default-signed.hap-CSDN博客 根據網絡查詢鴻蒙手機安裝測試app&#xff0c;需要電腦命令安裝 在鴻蒙HarmonyOS手…

Linux 文件系統實現層詳解:原理、結構與驅動銜接

&#x1f4c2; Linux 文件系統實現層詳解&#xff1a;原理、結構與驅動銜接 &#x1f3ac; 推薦搭配視頻學習&#xff1a;Linux 文件系統子系統&#xff1a;三層架構全面掌握 一、為什么要重點理解文件系統實現層&#xff1f; 文件系統實現層是 Linux 文件系統的“地基”&…

區塊鏈應用場景深度解讀:金融領域的革新與突破

引言&#xff1a;區塊鏈技術的演進與金融領域的變革區塊鏈技術自2008年誕生以來&#xff0c;以其去中心化、不可篡改、可追溯等特性&#xff0c;在全球范圍內引發了金融領域的深刻變革。從最初的數字貨幣實驗&#xff0c;到如今在跨境支付、證券交易、供應鏈金融等領域的廣泛應…

redisson tryLock

應用場景RLock rLock redissonClient.getLock(Constant_LOCK request.getId()); try {boolean isLocked rLock.tryLock();if (!isLocked) {throw new ServiceException(ErrConstant.OPERATION_FAILED, "請勿重復提交");}源碼public interface RLock extends Lock,…

前端docx庫實現將html頁面導出word

前言&#xff1a;最近遇到一個需求&#xff0c;需要將頁面的html導出為word文檔&#xff0c;并且包含橫向和豎向頁面&#xff0c;并且可以進行混合方向導出。經過一段時間的實驗&#xff0c;發現只有docx這個庫滿足這個要求。在這里記錄一下實現思路以及代碼。 docx官網 一、…

虛擬主機CPU占用100導致打不開的一次處理

背景 突然有一天&#xff0c;有個客戶網站打不開了&#xff0c;發來這樣一張圖片問題排查 打開阿里云虛擬主機控制面板&#xff0c;CPU 使用率已經達到了100%&#xff0c;這說明網站已經在高負荷運轉。分析訪問日志發現&#xff0c;網站出現了大量循環路徑&#xff0c;其 UserA…

設計模式之工廠模式:對象創建的智慧之道

工廠模式&#xff1a;對象創建的智慧之道 引言&#xff1a;為什么我們需要工廠模式&#xff1f; 在軟件開發中&#xff0c;對象創建是最常見的操作之一。當代碼中充滿new關鍵字時&#xff0c;系統會面臨三大痛點&#xff1a; 緊耦合&#xff1a;客戶端代碼直接依賴具體實現類擴…

Docker鏡像制作案例

1、使用Docker commit制作鏡像為ubuntu鏡像提供ssh服務①&#xff1a;拉取鏡像[rootopenEuler-1 ~]# docker pull ubuntu:18.04②&#xff1a;啟動鏡像[rootopenEuler-1 ~]# docker run --name c1 -it --rm ubuntu:18.04 bash③&#xff1a;替換aliyun源mv /etc/apt/sources.li…

KeilMDK5如何生成.bin文件

1&#xff1a;主要是要找到fromelf.exe的路徑2&#xff1a;接下來要做的要視情況而定&#xff1a;選完fromelf.exe后在輸入框中加個空格然后加一串字 : --bin -o ./Obj/L.bin ./Obj/L.axf&#xff0c;如下我設置的L最終會替換成項目名 3&#xff1a;去構建生成編譯一下&#…

Ajax接收java后端傳遞的json對象包含長整型被截斷導致丟失精度的解決方案

問題描述 在使用java編寫代碼的時候,后端返回前端的JSON對象中包含了Long長整型,前端接受的時候丟失了精度問題。 比如: 后端傳遞的json {"code": "200","msg": "操作成功","data":

MybatisPlus由淺入深

MyBatis-Plus&#xff08;簡稱 MP&#xff09;是一個 MyBatis 的增強工具&#xff0c;旨在簡化開發過程。基本使用步驟1.依賴引入<!-- mysql依賴 --> <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId>…

藍牙信號強度(RSSI)與鏈路質量(LQI)的測量與應用:面試高頻考點與真題解析

在藍牙通信領域&#xff0c;信號強度&#xff08;RSSI&#xff09;和鏈路質量&#xff08;LQI&#xff09;是評估無線鏈路性能的核心指標。無論是智能家居設備的連接優化&#xff0c;還是工業物聯網中的抗干擾設計&#xff0c;這兩個指標都扮演著關鍵角色。本文將結合面試高頻考…

PyTorch的計算圖是什么?為什么繪圖前要detach?

在PyTorch中&#xff0c;計算圖&#xff08;Computational Graph&#xff09; 是自動求導&#xff08;Autograd&#xff09;的核心機制。理解計算圖有助于解釋為什么在繪圖前需要使用 .detach() 方法分離張量。一、什么是計算圖&#xff1f; 計算圖是一種有向無環圖&#xff08…

深度學習入門代碼詳細注釋-ResNet18分類螞蟻蜜蜂

本項目將基于PyTorch平臺遷移ResNet18模型。該模型原采用ImageNet數據集&#xff08;含1000個圖像類別&#xff09;進行訓練。我們將嘗試運用該模型對螞蟻和蜜蜂進行分類&#xff08;這兩個類別未包含在原訓練數據集中&#xff09;。 本文的原始代碼參考于博客深度學習入門項目…

北京飲馬河科技公司 Java 實習面經

北京飲馬河科技公司 Java 實習面經 本文作者&#xff1a;程序員小白條 本站地址&#xff1a;https://xbt.xiaobaitiao.top 1&#xff09; 面試官&#xff1a;我看你這塊是有一個開源的項目&#xff0c;這個項目主要是做什么的&#xff1f; 我&#xff1a;主要兩點是亮點&…

java基礎(day07)

目錄 OOP編程 方法 方法的調用&#xff1a; 在main入口函數中調用&#xff1a; 動態參數&#xff1a; 方法重載 OOP編程 方法 概念&#xff1a;指為獲得某種東西或達到某種目的而采取的手段與行為方式。有時候被稱作“方法”&#xff0c;有時候被稱作“函數”。例如UUID.…

使用EasyExcel動態合并單元格(模板方法)

1、導入EasyExcel依賴<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>4.0.3</version> </dependency>2、編寫實體類Data publci class Student{ ExcelProperty("姓名")pri…

jenkins 流水線比較簡單直觀的

//全篇沒用自定義變量pipeline {agent any// 使用工具自動配置Node.js環境tools {nodejs nodejs22 // 需在Jenkins全局工具中預配置該名稱的Node.js安裝}//下面拉取代碼通過的是流水線片段生成的stages {stage(Checkout Code) {steps {git branch: release-v1.2.6,credentials…

CV目標檢測中的LetterBox操作

LetterBox類比理解&#xff1a;想象你要把一張任意形狀的照片放進一個正方形的相框里&#xff0c;照片不能變形拉伸&#xff0c;所以你先等比例縮小照片&#xff0c;然后在空余的地方填上灰色背景。第1章 數學原理當我們有一個原始圖像的尺寸為 19201080&#xff08;寬高&#…

Leetcode 3614. Process String with Special Operations II

Leetcode 3614. Process String with Special Operations II 1. 解題思路2. 代碼實現 題目鏈接&#xff1a;3614. Process String with Special Operations II 1. 解題思路 這一題思路上是一個逆推的思路。 首先&#xff0c;我們順序走一輪不難得到最終我們能夠獲得的字符串…