12

これまで、findを使用してすべてのファイルを再帰的に解凍する方法を理解しました。

find . -depth -name `*.zip` -exec /usr/bin/unzip -n {} \; 

しかし、抽出後にzipファイルを1つずつ削除する方法がわかりません。-a-execにrm*.zipを追加すると、抽出される前に、各ディレクトリ内のほとんどのzipファイルが削除されます。rmコマンドを含むスクリプトをパイプ処理すると(テスト用に-iが有効になっている場合)、findは* .zipを検出しません(または少なくともそれが文句を言います)。もちろん、多くのファイル名には空白がありますが、現時点では、sedコマンドで_を追加するための構文は私を少し超えています。お手伝いありがとうございます!

4

5 に答える 5

14

やってみました:

find . -depth -name '*.zip' -exec /usr/bin/unzip -n {} \; -exec rm {} \;

また

find . -depth -name '*.zip' -exec /usr/bin/unzip -n {} \; -delete

または、解凍した後に2番目の検索を実行します

find . -depth -name '*.zip' -exec rm {} \;   
于 2011-04-08T04:41:39.343 に答える
10

-delete!を使用した2番目のコマンドのthx 私を大いに助けてくれました..私の側からの2つの(おそらく役立つ)発言:

-私のDebianシステムでは` .zip`の代わりに' .zip'を使用する必要がありました

-execの代わりに-execdirを使用します>これにより、現在のフォルダー内の各zipファイルが抽出されます。そうしないと、findcmdを呼び出したディレクトリに抽出されたすべてのコンテンツが含まれることになります

探す 。-depth -name'* .zip' -execdir / usr / bin / unzip -n {} \; -消去

THX&よろしく、Nord

于 2012-03-17T17:21:55.560 に答える
2

Unzip archives in subdir based on the file name (../file.zip -> ../file/..):

for F in $(find . -depth -name *.zip); do unzip "$F" -d "${F%.*}/" && rm "$F"; done
于 2015-05-20T02:26:51.640 に答える
0

圧縮されたcsvファイルでいっぱいになっているディレクトリがあります。外部プロセスが新しい圧縮ファイルを頻繁に書き込んでいます。あなたと同じように、オリジナルを一括解凍して削除したいと思います。

それを行うには、次を使用します。

    unzip '*.zip'
    find . | sed 's/$/\.zip/g' | xargs -n 1 rm 

現在ディレクトリにあるすべてのzipファイルを検索して展開することで機能します。後で、それが終了した後、まだ削除されていない新しい解凍された新しいファイルが混在している可能性があります。

したがって、正常に解凍された *.csv ファイルを見つけて削除し、sed を使用して元のファイル名を再生成して削除し、それを xargs コマンドを介して rm に送ります。

于 2016-03-31T23:03:29.770 に答える