重複の可能性:
サブツリーから空のディレクトリをすべて削除する方法は?
私はホームディレクトリ全体に散在するディレクトリを頻繁に作成しますが、それを見つけて削除するのは難しいです。
私のホームディレクトリ内のすべての空のディレクトリを見つけて削除するには、エイリアス/関数/スクリプトを使用したいと思います。
答え1
このfind
コマンドは、再帰的なファイルシステムを操作するための基本的なツールです。式を使用して(通常のファイルではなく)ディレクトリを見つけることにのみ興味があること-type d
を知らせます。find
GNUバージョンはテストを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