Bash

Zip 文件一起共享公共前綴

  • January 11, 2021

我有一個包含 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將對此發出警告,但不會中止。

引用自:https://unix.stackexchange.com/questions/628591