次のようなdirツリーがあるとします。
ROOTDIR
└--SUBDIR1
└----SUBDIR2
└----SUBDIR3
入力したときに次のようなコマンドを探しています。
$ [unknown command] ROOTDIR
Dirツリー全体を削除できますファイルがなく、ツリー全体にdirsしかない場合。ただし、SUBDIR1の下にhello.pdfというファイルがある場合は、
ROOTDIR
└--SUBDIR1
└--hello.pdf
└----SUBDIR2
└----SUBDIR3
次に、コマンドはSUBDIR2以下のみを削除する必要があります。
アレクシスは近いです。あなたがする必要があるのはこれです:
find . -type d -depth -empty -exec rmdir "{}" \;
最初に空のディレクトリが見つかるまでディレクトリツリーをドリルダウンし、それを削除します。したがって、親ディレクトリを空にしてから削除します。これにより、望ましい効果が得られます(これはおそらく週に10回行うので、間違いなく正しいと思います)。 :-)
find ROOTDIR -type d -empty -delete
と同じ
find ROOTDIR -type d -depth -empty -exec rmdir "{}" \;
ただし、組み込みの「-delete」アクションを使用します。
「-delete」は「-depth」を意味することに注意してください。
私はこれを試します:
find ROOTDIR -type d -depth -exec rmdir {} \;
安全に行う前に、いくつかの要件があります。
これがシェルでそれを行う方法です:
find ./ROOTDIR -type d | sort -r | tr '\n' '\000' | xargs -0 rmdir --ignore-fail-on-non-empty
いくつかの冗長なエラーが気にならない場合は、親を持つすべてのディレクトリを強制的に削除することができ、並べ替えを行う必要はありません(NULで終了する文字列を並べ替えることができないため、trに追加する必要があります)。
find ./ROOTDIR -type d -print0 | xargs -0 rmdir --ignore-fail-on-non-empty --parents
rmdir $(find ROOTDIR -type d | sort -r)
私はこれを行います:
find ROOTDIR -type d | xargs -0 -I {} rmdir {}