999
名前に対応する文字列を含まないファイルを削除したいと思います。
私は試した:
grep -vlr 999 . | xargs -0 rm -f --
find . -print0 | grep --null-data -v 999 | xargs -0 rm --
しかし、それらのどれも動作しません。私はbash:3.2.57でmacOS Sierraを使用しています。
ベストアンサー1
以下で拡張されたglobbingパターンを使用してくださいbash
。
rm ./!(*999*)
この機能を有効にする必要があります(そして、shopt -s extglob
すべてのファイル名が含まれている場合は、shopt -s failglob
珍しい名前のファイルが誤って削除されないように安全にする必要があります)。このパターンは、一致する名前を除く現在のディレクトリのすべての名前と一致します。!(*999*)
999
!(*999*)
*999*
また、隠しファイル(名前が次に始まる)を削除します。指す)、このdotglob
オプションを有効にしますshopt -s dotglob
。
一般ファイルまたは一般ファイルへのシンボリックリンク(ディレクトリなどを除く)にのみ興味があります。
for name in ./!(*999*); do [ -f "$name" ] && rm "$name"; done
上記のループに対応するシェルはzsh
次のとおりです。
rm ./(^(*999*))(.)
grep
最初のコマンドはファイルの内部を見るために機能しません。行なしですべてのファイルを削除します(対応する999
オプションを追加すると--null
機能しますxargs -0
)。
grep
2番目のコマンドはmacOSでサポートされていないため、機能しません--null-data
(ただし、オプションはありますが、--null
ファイル名出力を生成する場合のみ)。また、999
ファイルのどこにでも表示できます。パス名(つまり、ファイル名だけでなく、すべてのディレクトリコンポーネントを含む)