ホームディレクトリの空のディレクトリを再帰的に削除するには? [コピー]

ホームディレクトリの空のディレクトリを再帰的に削除するには? [コピー]

重複の可能性:
サブツリーから空のディレクトリをすべて削除する方法は?

私はホームディレクトリ全体に散在するディレクトリを頻繁に作成しますが、それを見つけて削除するのは難しいです。

私のホームディレクトリ内のすべての空のディレクトリを見つけて削除するには、エイリアス/関数/スクリプトを使用したいと思います。

答え1

このfindコマンドは、再帰的なファイルシステムを操作するための基本的なツールです。式を使用して(通常のファイルではなく)ディレクトリを見つけることにのみ興味があること-type dを知らせます。findGNUバージョンはテストをfindサポートしているので-empty

$ find . -type d -empty -print

現在のディレクトリの下のすべての空のディレクトリが印刷されます。

現在のディレクトリでない場合は、ホームディレクトリを使用するか、find ~ -…それに基づいて検索してください。find "$HOME" -…

正しいディレクトリが選択されていることを確認したら、-delete次を使用して一致するすべてのエントリを削除します。

$ find . -type d -empty -delete

答え2

空のディレクトリのみが削除されるため、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

関連情報