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
オプションを追加してください。
答え2
bash
を使用する場合と を組み合わせて使用できます。extglob
nocaseglob
shopt -s extglob nocaseglob
for file in !(@(*.bmp|*.wav|*.png)); do
[[ -f "${file}" ]] && files+=( "${file}" )
done
(( ${#files[@]} )) && rm "${files[@]}"
それ以外の場合は、次のようにできます。
find . -maxdepth 1 -type f ! \( -iname '*.bmp' -o -iname '*.wav' -o \
-iname '*.png' \) -delete
答え3
使用 zsh
、削除定期的な.bmp
、、.png
を除くファイル.wav
(大文字と小文字の区別):
setopt extendedglob # best in ~/.zshrc
rm -- ^*.(#i)(png|bmp|wav)(D.)
(D
拡張子に関係なく隠しファイルを保持したい場合は、上記の項目を削除してください。)
答え4
誤って愚かなことをしないようにしばらく時間をかけて、いくつかの手順を実行することをお勧めします。
削除するファイルを識別するコマンドを作成します。
ls | grep -v *.bmp | grep -v *.wav # current directory
または
find . -type f | grep -v *.bmp # current and sub directories
返されたファイルのリストが削除したいファイルの場合
最後のコマンドを呼び出して
xargs rm
このコマンドを追加します。ls | grep -v *.bmp | grep -v *.wav | xargs rm