次の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
これに関する警告が表示されますが、中断されません。