サブディレクトリを含むディレクトリ内のファイルを削除する自動化プロセスを設定しています。ディレクトリ内のファイルのみを削除し、サブディレクトリはそのままにしておきたい。そのため、現在はrm *
を使用してそのディレクトリ内のファイルを削除しています。ただし、このコマンドは次のメッセージをスローします:cannt remove 'dir': Is a directory
。気まぐれになっていることはわかっていますが、そのメッセージがログに繰り返し表示されることは望ましくありません。削除に使用できるより良いコマンドや、サブディレクトリを無視するようにrm
に指示できる方法はありますか?
エラーメッセージを破棄するだけです。
rm * 2>/dev/null
それはすべてのエラーを捨てます。他の潜在的なエラーを確認したい場合は、さらに複雑なことを行うことができます。
rm * 2>&1 | grep -v 'cannot remove .*: Is a directory'
このようにして、他のエラーは引き続きログに記録されます。
はい、どうぞ:
find ./ -type f -exec rm -f * {} \; 2> /dev/null
サブディレクトリ内のファイルもそのままにしておきたい場合:
rm -f * 2> /dev/null
Zshの場合:
rm *(^/)
他のシェルには、zshの glob qualifiers に相当するものはありません。代わりに、ファイルをタイプで区別できる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
にこれらのオプションがないシステムでスクリプトを実行する必要がない場合に限ります。私が使用したオプションは移植可能です。)