次を使用して、ターゲットディレクトリと、そのすべてのサブディレクトリおよびコンテンツを再帰的に削除できます。
find '/target/directory/' -type d -name '*' -print0 | xargs -0 rm -rf
ただし、ターゲットディレクトリを削除したくありません。ターゲット内のファイル、サブディレクトリ、およびそれらのコンテンツのみを削除するにはどうすればよいですか?
前の答えはほぼ正しいです。ただし、動作させる場合は Shell glob characters を引用符で囲まないでください。だから、これはあなたが探しているコマンドです:
rm -rf "/target/directory with spaces/"*
*は二重引用符の外側にあることに注意してください。このフォームも機能します:
rm -rf /target/directory\ with\ spaces/*
上記のように*
が引用符で囲まれている場合、ターゲットディレクトリ内の文字どおり*
という名前の単一のファイルのみが削除されます。
さらに3つのオプション。
find
を-mindepth 1
および-delete
とともに使用します。
−心深さレベル
レベル(負でない整数)未満のレベルでテストまたはアクションを適用しないでください。
− mindepth 1は、コマンドライン引数を除くすべてのファイルを処理することを意味します。-削除
ファイルを削除します;削除が成功した場合はtrue。削除が失敗した場合、エラーメッセージが発行されます。 −deleteが失敗すると、findの終了ステータスはゼロ以外になります(最終的に終了するとき)。 −deleteを使用すると、−depthオプションが自動的にオンになります。
このオプションを使用する前に、-depthオプションを使用して慎重にテストしてください。
# optimal?
# -xdev don't follow links to other filesystems
find '/target/dir with spaces/' -xdev -mindepth 1 -delete
# Sergey's version
# -xdev don't follow links to other filesystems
# -depth process depth-first not breadth-first
find '/target/dir with spaces/' -xdev -depth -mindepth1 -exec rm -rf {} \;
2。 find
を使用しますが、ディレクトリではなくファイルを使用します。これにより、rm -rf
が不要になります。
# delete all the files;
find '/target/dir with spaces/' -type f -exec rm {} \;
# then get all the dirs but parent
find '/target/dir with spaces/' -mindepth 1 -depth -type d -exec rmdir {} \;
# near-equivalent, slightly easier for new users to remember
find '/target/dir with spaces/' -type f -print0 | xargs -0 rm
find '/target/dir with spaces/' -mindepth 1 -depth -type d -print0 | xargs -0 rmdir
3。先に進んで親ディレクトリを削除しますが、再作成します。 1つのコマンドでこれを行うbash関数を作成できます。ここに簡単なワンライナーがあります:
rm -rf '/target/dir with spaces' ; mkdir '/target/dir with spaces'
find /target/directory/ -xdev -depth -mindepth 1 -exec rm -Rf {} \;