回答:
で拡張グロビングパターンを使用するbash
:
rm ./!(*999*)
これはshopt -s extglob
有効にする必要があります(また、安全のshopt -s failglob
ために、!(*999*)
すべてのファイル名にが含まれている場合に、異常な名前のファイルが誤って削除されないようにします999
)。パターン!(*999*)
は、に一致する名前を除いて、現在のディレクトリ内の任意の名前に一致し*999*
ます。隠しファイル(名前がドットで始まるファイル)も削除するには、このdotglob
オプションを有効にします。
通常のファイルまたは通常のファイルへのシンボリックリンク(ディレクトリなどではない)のみを処理するには:
for name in ./!(*999*); do [ -f "$name" ] && rm "$name"; done
zsh
上記ループシェル当量であろう
rm ./(^(*999*))(.)
最初のコマンドはgrep
ファイル内を調べるため、機能しません。行が含ま999
れていないすべてのファイルが削除されます(--null
オプションを追加した場合に機能しますxargs -0
)。
grep
macOSではサポートされていないため、2番目のコマンドは機能しません--null-data
(ただし、--null
オプションはありますが、ファイル名の出力を生成する場合のみ)。また、ファイルの名前だけでなく999
、ファイルのパス(ディレクトリコンポーネントを含む)のどこでも検索されることに注意してください。
failglob
オプションを有効にすることもでき!(*999*)
ます999
。そうしないと、名前にを含まない他のファイルがない場合に呼び出されるファイルが削除される可能性があります。
grep -l
ファイル名ではなく、コンテンツで一致が見つかった(またはで見つからなかった-v
)ファイルを一覧表示します。指定したファイルの内容と常に一致します。名前は一致しません。grep