Bash
Zip 文件一起共享公共前綴
我有一個包含 scsv 文件的目錄,如下所示:
file1.scsv file1_key.scsv file1_flag.scsv file1_typelist.scsv files2.scsv filass3.scsv file4.scsv file4_key.scsv file4_flag.scsv file5.scsv
即您有
file1
,files2
,filass3
等作為前綴。前綴長度變化很大,所以我不能依賴它。後綴_key
,_flag
並且_typelist
始終相同,不會改變。我想像這樣壓縮它們:
file1.zip #contains file1.scsv file1_key.scsv file1_flag.scsv file1_typelist.scsv files2.zip #contains files2.scsv filass3.zip #contains filass3.scsv file4.zip #contains file4.scsv file4_key.scsv file4_flag.scsv file5.zip #contains file5.scsv
我對 bash/linux 很陌生,所以我嘗試瞭如何壓縮具有相同名稱但副檔名不同的文件?作為範例,但這假設文件在副檔名之前具有完全相同的名稱。
我假設
files2.zip #contains files2.scsv filass3.zip #contains filass3.scsv
可以接受;否則你必須澄清文件名轉換規則。
for file in *.scsv; do if [[ ! "$file" =~ _ ]]; then base="${file%.scsv}" zip -9 "${base}.zip" "${file}" "${base}_*.scsv" fi done
將查看每個帶有
.scsv
副檔名的文件,如果其名稱不包含“_”,則創建一個以它命名的 ZIP 文件(使用.zip
而不是.scsv
),其中包含該文件和任何其他具有相同前綴且後跟一個下劃線的文件。這裡有一個小技巧:我依靠
zip
’s 萬用字元處理而不是 shell,以避免在沒有其他文件要添加時處理問題。zip
將對此發出警告,但不會中止。