``dir`を削除できません:ディレクトリメッセージ。無視

``dir`を削除できません:ディレクトリメッセージ。無視

サブディレクトリを含むディレクトリからファイルを削除する自動化されたプロセスを設定しています。ディレクトリのファイルを削除し、サブディレクトリはそのままにしたいと思います。今、私はrm *そのディレクトリのファイルを削除するために使用します。ただし、このコマンドは次のメッセージを表示しますcannt remove 'dir': Is a directory。私は面倒であることはわかりますが、このメッセージが私のログに繰り返し表示されることは望ましくありません。削除に使用できるより良いコマンドまたはrmサブディレクトリを無視する方法はありますか?

答え1

エラーメッセージを削除できます。

rm * 2>/dev/null

これにより、すべてのエラーが削除されます。他の潜在的なエラーを特定するには、より複雑なタスクを実行できます。

rm * 2>&1 | grep -v 'cannot remove .*: Is a directory'

これにより、他のエラーが記録され続けます。

答え2

zshから:

rm *(^/)

他のシェルzshと同等のシェルはありませんグローバル予選。代わりに、findファイルをタイプ別に区別できるものを呼び出して.(開始ディレクトリ)以外のサブディレクトリに再帰しないように指示できます。

find . -name . -o -type d -prune -o rm -f {} +

これにより、ドットファイルが削除されますが、*ドットファイルと一致しません。ドットファイルをアーカイブするには、find呼び出さないでくださいrm

find . -name . -o -type d -prune -o ! -name '.*' rm -f {} +

-mindepth(、-maxdepthおよびを使用できますが、これらのオプションがないシステムで-deleteスクリプトを実行する必要がない場合にのみ使用できます。私が使用したオプションは移植可能です。)find

答え3

あなたのため:

find ./ -type f -exec rm -f * {} \; 2> /dev/null

サブディレクトリのファイルをそのまま残すには、次の手順を実行します。

rm -f * 2> /dev/null

関連情報