web-dev-qa-db-ja.com

ホームディレクトリ内の空のディレクトリを再帰的に削除するにはどうすればよいですか?

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

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

エイリアス/関数/スクリプトで、ホームディレクトリ内のすべての空のディレクトリを検索/検索して削除したい。

158
Santosh Kumar

findコマンドは、再帰的なファイルシステム操作のための主要なツールです。 -type d式を使用して、findにディレクトリのみを検索したい(プレーンファイルは検索しない)ことを伝えます。 GNU findのバージョンは-emptyテストをサポートしているため、

$ find . -type d -empty -print

現在のディレクトリの下にあるすべての空のディレクトリを印刷します。

find ~ -…またはfind "$HOME" -…を使用して、ホームディレクトリを検索します(現在のディレクトリでない場合)。

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

$ find . -type d -empty -delete
310
Baldrick

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
15
jordanm