回答:
あなたがしようとしているのは、再帰的な削除です。そのためには、などの再帰的なツールが必要です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を使用しています。