以下を使用して、ターゲットディレクトリと、そのすべてのサブディレクトリおよびコンテンツを再帰的に削除できます。
find '/target/directory/' -type d -name '*' -print0 | xargs -0 rm -rf
ただし、ターゲットディレクトリを削除したくありません。ターゲット内のファイル、サブディレクトリ、およびそれらのコンテンツのみを削除するにはどうすればよいですか?
以下を使用して、ターゲットディレクトリと、そのすべてのサブディレクトリおよびコンテンツを再帰的に削除できます。
find '/target/directory/' -type d -name '*' -print0 | xargs -0 rm -rf
ただし、ターゲットディレクトリを削除したくありません。ターゲット内のファイル、サブディレクトリ、およびそれらのコンテンツのみを削除するにはどうすればよいですか?
回答:
前の答えはほぼ正しいです。ただし、シェルグロブ文字を機能させたい場合は、引用符で囲まないでください。だから、これはあなたが探しているコマンドです:
rm -rf "/target/directory with spaces/"*
*は二重引用符の外側にあることに注意してください。このフォームも機能します:
rm -rf /target/directory\ with\ spaces/*
あなたが持っている場合は*
上記のように引用符で、それだけで、文字通りという名前の単一のファイル削除しようとする*
ターゲットディレクトリ内を。
さらに3つのオプション。
使用find
して-mindepth 1
と-delete
:
−mindepth levels
レベル(負でない整数)未満のレベルでテストやアクションを適用しないでください。
−mindepth 1は、コマンドライン引数を除くすべてのファイルを処理することを意味します。-delete
ファイルを削除します。削除が成功した場合は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'
いかがですか
rm -rf /target/directory\ path/*
で始まるファイルがある場合。ターゲットディレクトリ。
rm -rf "/target/directory path/*" "/target/directory path/.??*"
この秒は、を除いて。で始まるすべてに一致します。および.. .aのような名前では失敗しますが、それはあまり一般的ではありません。必要に応じて、すべてのケースをカバーするように調整できます。