重複の可能性:
サブツリー内のすべての空のディレクトリを削除する方法?
私は非常に頻繁にディレクトリを作成し、ホームディレクトリに散らばっていますが、それらを見つけて削除するのは非常に困難です。
エイリアス/関数/スクリプトで、ホームディレクトリ内のすべての空のディレクトリを検索/検索して削除したい。
find
コマンドは、再帰的なファイルシステム操作のための主要なツールです。 -type d
式を使用して、find
にディレクトリのみを検索したい(プレーンファイルは検索しない)ことを伝えます。 GNU find
のバージョンは-empty
テストをサポートしているため、
$ find . -type d -empty -print
現在のディレクトリの下にあるすべての空のディレクトリを印刷します。
find ~ -…
またはfind "$HOME" -…
を使用して、ホームディレクトリを検索します(現在のディレクトリでない場合)。
これが正しいディレクトリを選択していることを確認したら、-delete
を使用してすべての一致を削除します。
$ find . -type d -empty -delete
rmdir
は空のディレクトリのみを削除するため、すべてのディレクトリでrmdir
を呼び出すことができます。
find "$HOME" -type d -exec rmdir {} + 2>/dev/null
削除されるディレクトリも印刷したい場合は、それらが空かどうかを確認する必要があります。
find "$HOME" -type d -exec bash -c 'shopt -s nullglob; shopt -s dotglob; files=("$1"/*); [[ ${files[@]} ]] || rmdir -v "$1"' -- {} \;
純粋なbashの例を次に示します(バージョン4以降):
shopt -s globstar
for dir in **/; do
files=("$dir"/*)
[[ ${files[@]} ]] || rmdir -v "$dir"
done