名前に文字列を含まないファイルを削除する

名前に文字列を含まないファイルを削除する

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)。

grep2番目のコマンドはmacOSでサポートされていないため、機能しません--null-data(ただし、オプションはありますが、--nullファイル名出力を生成する場合のみ)。また、999ファイルのどこにでも表示できます。パス名(つまり、ファイル名だけでなく、すべてのディレクトリコンポーネントを含む)

おすすめ記事