回答:
あなたがしようとしているのは、再帰的な削除です。そのためには、などの再帰的なツールが必要ですfind
。
find FOLDER -type f -delete
でbash
:
shopt -s globstar ## Enables recursive globbing
for f in FOLDER/**/*; do [[ -f $f ]] && echo rm -- "$f"; done
ここでは、glob展開されたファイル名を反復処理し、ファイルのみを削除します。
上記はドライランです。変更する必要がある場合は、echo
実際に削除するために削除します。
for f in FOLDER/**/*; do [[ -f $f ]] && rm -- "$f"; done
最後に、設定解除globstar
:
shopt -u globstar
でzsh
、glob修飾子を活用:
echo -- FOLDER/**/*(.)
(.)
glob修飾子であり、glob展開を通常のファイルのみに制限します。
上記は実際の削除のためにファイル名を出力するだけです:
rm -- FOLDER/**/*(.)
のバージョンがfind
サポートしていない-delete
場合は、次を使用して現在のディレクトリ以下のすべてのファイルを削除できます。
find . ! -type d -exec rm '{}' \;
-exec rm {} +
特にファイルが多い場合は高速になります。
find . ! -type d -exec rm {} +
symリンクも削除します。
find
サポートし-delete
ていない場合、おそらくサポート-exec ... {} +
もしていません。これに対処するための推奨される方法はfind ... -print0 | xargs -r0 rm
(多くの潜在的な一致が予想される場合)です。
-exec ... {} +
POSIXですが、そうで-delete
はありません。(どちらもしない-print0
方法によって、)
find
サポートされている-print0
がサポートされていない、少なくとも2つの非POSIX 実装に遭遇しました-exec ... {} +
(覚えて-delete
いません)。1つはOS X上にあり、もう1つはSolaris上にありました(数年前、非常に保守的に更新されたシステム上)。また、置き換えることができ-print0
て-printf '%p\0'
。とにかく、これはUnixとLinuxではなくAsk Ubuntuであり、Ubuntuは永遠にGNU findを使用しています。