共通プレフィックスを共有するためにファイルを一緒に圧縮

共通プレフィックスを共有するためにファイルを一緒に圧縮

次の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に初めて触れたので、次のことを試しました。名前は同じですが、拡張子が別のファイルを圧縮する方法は?たとえば、これはファイルの拡張子の前にまったく同じ名前があるとします。

ベストアンサー1

私は仮定する

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追加する他のファイルが存在しない場合の処理​​の問題を回避するために、シェルのワイルドカード処理ではなくワイルドカード処理に依存しています。zipこれに関する警告が表示されますが、中断されません。

おすすめ記事