Shell-Script
使用具有特定模式的 /bin/gzip 壓縮文件
我想用特定的模式單獨壓縮文件。例如,我的目錄如下:
/log/log1 -/1/log2/file.1 -/1/log2/file123 -/1/log2/file2.1 /log/log2 -/2/log2/file4.1 -/2/log2/file345 -/2/log2/file3.1
我想以遞歸方式壓縮 /log 中所有副檔名為 .1 的文件。
結果看起來像
/log/log1 -/1/log2/file.gz -/1/log2/file123 -/1/log2/file2.gz /log/log2 -/2/log2/file4.gz -/2/log2/file345 -/2/log2/file3.gz
find
+**bash
**解決方案:find /log -type f -name "*.1" -exec bash -c 'gzip -nc "$1" > "${1:0:-2}.gz"; rm "$1"' _ {} \;
gzip
選項:
-n
- 壓縮時,預設不保存原始文件名和時間戳-c
- 在標準輸出上寫入輸出;保持原始文件不變
${1:0:-2}
-bash
的切片;獲取截斷最後 2 個字元的文件路徑
您可以執行以下操作:
find /log -name '*.1' -type f -exec sh -c ' for file do gzip "$file" && mv -i "$file.gz" "${file%.*}.gz" done' sh {} +
我們使用
gzip file && mv -i file.gz newfile
asgzip < file > newfile && rm -f file
來受益於gzip
’ 將一些元數據保存到壓縮文件中mv -i
的能力以及更好地處理衝突的能力。