サブディレクトリを含むディレクトリからファイルを削除する自動化されたプロセスを設定しています。ディレクトリのファイルを削除し、サブディレクトリはそのままにしたいと思います。今、私は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