linux 如何針對同資料夾底下且為 20250627開頭的資料夾底下的 .jpg .csv 壓縮成同一個壓縮檔

 

 


你可以使用 find 搭配 tarzip 指令,將 當前資料夾下所有以 20250627 開頭的資料夾中的 .jpg.csv 檔案,一起壓縮成一個壓縮檔。

以下是幾種方法:


✅ 方法一:使用 find + tar(推薦,支援中文路徑)

find ./20250627*/ -type f \( -iname "*.jpg" -o -iname "*.csv" \) -print0 | tar --null -czvf output.tar.gz --files-from=-

解說:

  • 20250627*/:抓取所有以 20250627 開頭的資料夾

  • -type f:只找檔案

  • \( -iname "*.jpg" -o -iname "*.csv" \):找 .jpg.csv(不分大小寫)

  • -print0 + --null:支援含空格或中文的檔名

  • tar -czvf:建立 gzip 壓縮的 tar 檔 output.tar.gz


✅ 方法二:使用 zip

find ./20250627*/ -type f \( -iname "*.jpg" -o -iname "*.csv" \) -print | zip output.zip -@

解說:

  • -@ 代表從 stdin 接收檔案列表

  • zip 不像 tar 支援 -print0,中文檔案或空白有可能失敗(依系統設定)


如果你希望壓縮後的結構保留完整路徑:

以上指令都會保留原始資料夾結構(例如 20250627abc/image.jpg 會被保留在壓縮內)


加碼:如果只壓縮檔案、不保留資料夾結構?

可改為先複製到暫存資料夾,再壓縮,例如:

mkdir tmp_compress
find ./20250627*/ -type f \( -iname "*.jpg" -o -iname "*.csv" \) -exec cp --parents {} tmp_compress/ \;
cd tmp_compress
tar -czvf ../output.tar.gz ./
cd ..
rm -r tmp_compress