
私が試したとき
unzip filename.zip
効果があるただし、一連のzipファイルを解凍する必要があります。
なぜ:
find . -name "*.zip" -print0 | xargs -0 unzip
または
ls *.zip | xargs unzip
動作しない?
どちらの場合も、「警告:ファイル名の不一致:」というメッセージが表示されます。
答え1
答え2
あなたのコマンドは、すべてのファイルを同じコマンドラインに入力するため、機能しません。これはほとんどのプログラムで機能しますが、unzip
最初の引数はzipファイルとして使用され、最初の引数以降のすべての引数は抽出するファイルとして使用されます。各ファイルに対してコマンドを一度実行する必要があります。
find . -name "*.zip" -print0 | xargs -0 -n1 unzip
または
find . -name '*.zip' -exec unzip {} \;
答え3
Bashでは、次のこともできます。
for i in *.zip; do
unzip "$i"
done
出力を別の場所に配置できるようにスイッチもunzip
使用できます。-d
たとえば、
uzdir=/path/to/unzips
for i in *.zip; do
[ -d "$uzdir/$i" ] || mkdir -p "$uzdir/$i"
unzip "$i" -d "$uzdir/$i"
done
答え4
ディレクトリフラグを使用して上記のループよりも簡単な解決策があります-d
。
unzip -o somefiles.zip -d $directoryPath