GNU/Linux >> Linux の 問題 >  >> Linux

Linux ですべての空のファイルとディレクトリを再帰的に削除するにはどうすればよいですか?

これは非常にシンプルなワンライナーです:

find Parent -empty -delete

それはかなり自明です。確認したところ、Parent/Child1 が正常に削除されたことに驚きました。通常、-depth を指定しない限り、子より先に親を処理することが期待されます。 .

これは -delete であるため機能します -depth を意味します . GNU find マニュアルを参照してください:

<ブロック引用>

-delete ファイルを削除します。削除が成功した場合は true。削除に失敗した場合は、エラー メッセージが発行されます。 -delete が失敗した場合、find の終了ステータスはゼロ以外になります (最終的に終了するとき)。 -delete を使用すると、-depth オプションが自動的にオンになります。

これらの機能は Posix 標準の一部ではありませんが、多くの Linux ディストリビューションに含まれている可能性が高いことに注意してください。 -empty をサポートしていない Busybox に基づいているため、Alpine Linux などの小規模なものでは特定の問題が発生する可能性があります。 .

非標準の -empty を含むその他のシステム および -delete BSD と OSX は含まれますが、明らかに AIX は含まれません。


これが 2 つのコマンドによる解決策です

空のファイルを削除

find Parent/ -type f -size 0 -delete

すべてを削除してみてください ディレクトリ

find Parent/ -type d -depth -print0 | xargs -0 rmdir 2>/dev/null

NB rmdir 空でないディレクトリは削除できないため、安全に実行できますが、隠しているエラーが発生します

上記と同様ですが、無視されるエラー メッセージについてもう少し具体的に説明します。ディストリビューションによってメッセージが異なる場合は、修正が必要になる場合があります。

find Parent/ -type d -depth -print0 | xargs -0 rmdir 2>&1 \
  | grep -iv "Directory not empty$"

fd でこれを行うこともできます ツール:

fd -t e -x rm -r

https://github.com/sharkdp/fd


Linux
  1. Linuxでディレクトリを再帰的に検索および削除する方法

  2. Linux ファイルとディレクトリの削除

  3. Linuxでtestという名前のすべてのディレクトリを見つけて削除します

  1. Linuxでコマンドラインからファイルとディレクトリを削除する方法

  2. Linuxですべてのディレクトリのファイルを再帰的に検索する方法

  3. Unix で空のディレクトリとファイルを見つけて削除する方法

  1. Linux で空のディレクトリとファイルを見つけて削除する方法

  2. すべてのファイルとディレクトリを再帰的に一覧表示する方法

  3. ワイルドカード マッチングに基づいて、現在のフォルダーとサブフォルダー内のすべてのファイルを再帰的に検索するにはどうすればよいですか?