いくつかの拡張機能を除いてすべて削除

いくつかの拡張機能を除いてすべて削除

rm正規表現を使用してコマンドを変更したり、何かを削除したりできますか?現在のディレクトリ内のすべてのファイル(拡張子が?であるファイルを除く)*.bmpには、または同じファイルがあるため、大文字と小文字を区別しないでください。*.wav*.png*.BMP*.bMP

ベストアンサー1

@ChrisDownが提供しました。離れbashこれは、ファイルとディレクトリの違いと、削除するファイルがないかどうかを考慮します。

ただしrm、このような場合は失敗するため、次のようにコマンドを単純化できます(続行できますbash)。

shopt -s extglob nocaseglob
rm -- !(*.bmp|*.wav|*.png)

両方のシェルオプションをデフォルト値にリセットすることを忘れないでください。私の場合は、extglobインタラクティブシェルにすでに設定されているので、必要なだけでした。

shopt -u nocaseglob

または、サブシェルで次の2つのコマンドを実行します。

(shopt -s extglob nocaseglob
rm -- !(*.bmp|*.wav|*.png))

rmどのファイルが削除されるかを事前に確認するにはecho

隠しファイルも削除するには、そのdotglobオプションを追加してください。

おすすめ記事