回答:
で拡張グロビングパターンを使用する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)。
grepmacOSではサポートされていないため、2番目のコマンドは機能しません--null-data(ただし、--nullオプションはありますが、ファイル名の出力を生成する場合のみ)。また、ファイルの名前だけでなく999、ファイルのパス(ディレクトリコンポーネントを含む)のどこでも検索されることに注意してください。
failglobオプションを有効にすることもでき!(*999*)ます999。そうしないと、名前にを含まない他のファイルがない場合に呼び出されるファイルが削除される可能性があります。
grep -lファイル名ではなく、コンテンツで一致が見つかった(またはで見つからなかった-v)ファイルを一覧表示します。指定したファイルの内容と常に一致します。名前は一致しません。grep