web-dev-qa-db-ja.com

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

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

4
requiemforameme

エラーメッセージを破棄するだけです。

rm * 2>/dev/null

それはすべてのエラーを捨てます。他の潜在的なエラーを確認したい場合は、さらに複雑なことを行うことができます。

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

このようにして、他のエラーは引き続きログに記録されます。

2
Stephen Harris

はい、どうぞ:

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

サブディレクトリ内のファイルもそのままにしておきたい場合:

rm -f * 2> /dev/null
1
FarazX

Zshの場合:

rm *(^/)

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

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

これによりドットファイルが削除されますが、*はドットファイルと一致しません。ドットファイルを保持したい場合は、findrmを呼び出さないように指示してください。

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

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