ディレクトリを削除せずに、ディレクトリ内のすべてのファイルとサブディレクトリを削除するコマンドはありますか?
たとえば、サブディレクトリ「1」、「2」、「3」を持つディレクトリ「dontDeleteMe」があり、各サブディレクトリにいくつかの写真がある場合、サブディレクトリ「1」、「2」、「3」を削除するにはどうすればよいですか親ディレクトリ「dontDeleteMe」を削除せずに、それらのすべてのファイル?
ディレクトリを削除せずに、ディレクトリ内のすべてのファイルとサブディレクトリを削除するコマンドはありますか?
たとえば、サブディレクトリ「1」、「2」、「3」を持つディレクトリ「dontDeleteMe」があり、各サブディレクトリにいくつかの写真がある場合、サブディレクトリ「1」、「2」、「3」を削除するにはどうすればよいですか親ディレクトリ「dontDeleteMe」を削除せずに、それらのすべてのファイル?
回答:
ディレクトリを削除せずにディレクトリ内のすべてを削除するには、次のように入力します。
rm -rfv dontDeleteMe/*
この/*
部分は非常に重要です。の前にスペースを入れると、*
現在のディレクトリ内のすべてのファイルが削除されます。
また、非常に慎重で遊んでもrm
、-r
かつ*
同じコマンド内のすべての。それらは悲惨な組み合わせになる可能性があります。
更新: さて、私はあなたが隠されているんならば/ [、EX先頭にドットを含むファイル名のファイルをドット実現し.hidden
、これは無傷でそれらのファイルを残します]。
本当に、元の質問に対する最も簡単な解決策は次のとおりです。
rm -rfv dontDeleteMe && mkdir dontDeleteMe
別find
の-exec
方法は、xargs
(以下の)のオプションまたはパイプを使用することです。
find dontDeleteMe/* -print0 | xargs -0 rm -rv
find dontDeleteMe/* -print0 | xargs -0 rm -rv
ほとんどの場合、これはスペースに関係なく機能すると信じています。ただし、cdし/tmp/
てテストディレクトリを作成し、試してみてください。:)
rm -rf dontDeleteMe && mkdir dontDeleteMe
dirが同じ許可/所有者で再作成されることを保証しません。代わりに、find dontDeleteMe/ -mindepth 1 -delete
以下のバリアントのいずれかを使用してください。
ターミナルを開く(Ctrl+ Alt+ T)
find somedir -mindepth 1 -delete
これはsomedir
、「隠された」ドットファイルを含むsomedir
が-mindepth 1
、そのためにそれ自体を除外するすべてのファイルとディレクトリ、およびその(グランド)子に一致します-delete
。
(ターミナルで)「dontdelete」という名前のベースディレクトリを除くすべてのファイルとサブディレクトリを削除するには:
rm -rf dontdelete/*
次find
の-delete
フラグを使用できます。
find dontDeleteMe/* -delete
これ/*
はfind
、「dontDeleteMe」というフォルダー内のみを検索するよう指示するため重要です。
また、-delete
フラグがfind
コマンドの最後にあることを確認してください。
dotglob
。そうでなければ、-mindepth 1
フラグオプションを使用することが、それを機能させる唯一の方法のようです。
rm -rf directory/{.*,/*}
言うこと:
で始まるすべてのファイルを削除します。「ディレクトリ」および他のすべてのファイルにも。
Neftasから親切に指摘されているように、このソリューションは安全ではありません!
より安全なソリューションは次のとおりです。
rm -rf directory/!(.|..)
.
、および..
ディレクトリ。これはに変更{.*}
することで回避{.??*}
できますが、のように1文字のみの隠しファイルは削除しません.a
。
なぜこれがそんなに複雑なのかわかりません、間違っているなら助けてください
cd DoNotDeleteDir #<- this is just to make sure we are inside
find . | xargs rm -rf
それでおしまい
さらに簡単な答えがあります。
cd dontDeleteMe
rm -rf *
基本的なシステム管理の講義時間:このような抜本的なコマンドを使用するときは、現在地に注意してください。
それだけでは言えません。rm -rf *
/ にいる間に誰かが注意を払わずに入力したため、箱を回収しなければなりませんでした。
* nixは、rootである場合、またはrootとしてsudoを実行している場合は、自分が何をしているかを知っていると想定します。そのため、実行する前に何をしているかを確認してください。
「rm」を発行する前に「cd」コマンドが機能することを確認する代替手段は、
cd dontDeleteMe && rm -rf *
cd dontDeleteMe && rm -rf *
&&
オペレーターは、コマンドを連結するだけではありません。次のコマンドが実行される前に、各コマンドが成功する必要があります。cd
何らかの理由(ディレクトリが存在しない、特権など)でコマンドが失敗した場合、コマンドはrm
実行されません。もっと安全だと思います。
rm -rf *
とにかく走ってしまうので、それはかなり複雑に思えます。