
目的は、多くのzipファイルを解凍し、結果ファイルの名前を元のアーカイブ名に変更することです。
多くのzipファイルを含むフォルダの場合、ほとんどの名前というファイルが含まれていますが、bla.txt
もちろんいくつかの例外もあります。私たちが知っているように、すべてのファイルには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
ところで、コンテンツ名はどのようにして得られますか?
答え1
この-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
答え2
このコマンドには、アーカイブに実際のアーカイブ名を表示するunzip
独自のオプションがあり、このオプションはそのまま使用されます。したがって、一時ディレクトリを作成せずに、単に次のことができ、現在のディレクトリで実行されます。unzip -Z1 zipfile.zip
zipinfo's
-1
zipinfo -1 zipfile.zip
mv
for z in *.zip; do
unzip "$z";
mv "$(unzip -Z1 $z)" "${z%%.*}.txt";
done