目標は、多くのZipファイルを解凍し、結果のファイルの名前を元のアーカイブ名に変更することです。
多くのZipファイルが含まれるフォルダを考えると、それらのほとんどにはbla.txt
というファイルが含まれていますが、もちろんいくつかの例外があります。すべてが知られているのは、すべてのファイルに1つのファイル(txtファイル)があることです。
./zips/
a.Zip - contains bla.txt
b.Zip - contains bla.txt
c.Zip - contains somethingelse.txt
d.Zip - contains bla.txt
... - ...
出力は
./zips/
a.txt
b.txt
c.txt
d.txt
...
すべてを抽出するが、大量のフォルダーが残っている現在のベストショット:
for z in *.Zip; do unzip $z -d $(echo 'dir_'$z); done
たぶん
for z in *.Zip; do unzip $z; mv 'content_name.txt' $z; done
しかし、コンテンツ名はどのように取得されますか?
-d
アイデア、抽出されたファイルの名前を目的の「Zip名からZipプラスtxtを差し引いたもの」に変更するだけです。
mkdir tmp
for f in *.Zip; do unzip "$f" -d tmp && mv tmp/* "${f%.Zip}.txt"; done
rmdir tmp
または、unzipからの出力を適切な名前のファイルにパイプすることもできます。
for f in *.Zip; do unzip -p "$f" > "${f%.Zip}.txt"; done
コマンドunzip
には独自のオプションunzip -Z1 zipfile.Zip
を使用して、zipファイル内の実際の圧縮ファイル名を表示しますzipinfo's
オプション-1
そのままzipinfo -1 zipfile.Zip
。したがって、以下のように単純に行うことができ、一時ディレクトリを作成する必要はなく、mv
は現在のディレクトリに配置されます。
for z in *.Zip; do
unzip "$z";
mv "$(unzip -Z1 $z)" "${z%%.*}.txt";
done