osgsm.io
HomeNotesダウンロードした zip ファイルを展開し、もとの zip ファイルは削除するスクリプト

ダウンロードした zip ファイルを展開し、もとの zip ファイルは削除するスクリプト

Published Feb 5, 2025
Updated Mar 12, 2025

caution

次のコマンドは rm を使っているので、重要なファイルがダウンロードディレクトリにある場合は使用しないでください。 もしくは、 trash-clitrash-put などで代用してください。

find ~/Downloads -name '*.zip' | xargs -I {} sh -c 'unzip {} -d ~/Downloads/$(basename {} .zip) && rm {}'

find コマンドで ~/Downloads ディレクトリ以下の .zip ファイルを検索し、一致したファイル名を xargs に渡す。

-I {} でプレースホルダーを使い、引数の位置を指定できるようにする。ちなみに -I {} を使った場合は、それぞれのインプット行に対してコマンドが実行される。

プレースホルダーの値を複数のコマンドに渡したい場合は sh -c を実行し、コマンド文字列を作り、文字列をコマンドとして実行する必要がある。

コマンド文字列内では unzip コマンドを使う(unzip コマンドで ZIP ファイルからファイルを取り出す も参照)。その引数として xargs に渡されたものを使用する。

-d オプションで展開先を指定しているが、その中でコマンド置換を使って basename を実行。 xargs に渡されたパスからディレクトリ部分と拡張子を取り除いている。

最後に rm {} とし、 xargs に渡されたファイルを削除する。


参考