特定のパス(/opt/uploading/"*"/multiple .zip
ファイルなど)からzipファイルを動的に検索してzipファイルと同じフォルダに抽出する方法は?
以下の機能は、複数のzipファイルを解凍してzipファイルを削除する機能です。しかし、解凍されたファイルと一緒にzipファイルが存在したいと思います。
while true; do
find -iname '*.zip' > zipindex
test -s zipindex || break
for zip in $(cat zipindex); do unzip -o $zip && rm $zip; done
done
答え1
まあ、rm $zip
.Zipファイルは削除中ですので削除してください。
答え2
これはwhileループよりもforループに適しています。これにより、不要な結果の保存を削除することもできます。find -iname '*.zip' > zipindex
次のようにしてください。
#!/bin/bash
for zip in $(find -iname '*.zip'); do
unzip -o $zip
done
これは、その結果が見つかったすべての行に対して繰り返されます。
もちろん、bashスクリプトを完全に放棄し、次の find oneliner を作成する必要があります。
find -iname '*.zip' -execdir unzip {} \;
編集:@don_crisstiと@ilkkachuのおかげで、-execからシェルを呼び出す別のインスタンスを正常に削除しました。 -execdir知っておくといいですね!
答え3
GNU Parallelを使用すると、次のことができます。
find my_dir | grep -E '\.zip$' | parallel unzip
inotifywait -qmre MOVED_TO -e CLOSE_WRITE --format %w%f my_dir | grep -E '\.zip$' | parallel -u unzip
これにより、次のzipファイルが表示されるのを待つ必要がなくなります。