特定のパスのzipファイルを動的に検索して、抽出したファイルと同じフォルダに抽出しますか?

特定のパスのzipファイルを動的に検索して、抽出したファイルと同じフォルダに抽出しますか?

特定のパス(/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ファイルが表示されるのを待つ必要がなくなります。

関連情報