
ディレクトリ内にファイルのリストがあり、0 または 7 を含むすべてのファイルを削除する必要があります。grep を使用する必要があるような気がしますが、よくわかりません。何かアイデアはありますか?
答え1
実行したいのは、特定の条件テストに従ってファイルを評価し、条件テストの結果に従って各ファイルに対してアクションを実行することです。これがまさにこのfind
コマンドの目的です。
こちらはポータブル(POSIX準拠) コマンドを使用して、内容に「0」または「7」が含まれる通常のファイルを削除します。
find . -type f -exec grep -q '[07]' {} \; -exec rm {} +
ご了承くださいこれ再帰的に現在のディレクトリを検索します。
それが望ましくない場合は、-maxdepth
プライマリが使用可能かどうかを確認できます (その場合、プライマリを使用することもできます-delete
。どちらも POSIX では指定されていません)。
find . -maxdepth 1 -type f -exec grep -q '[07]' {} \; -delete
または、以下に示すテクニックを適用することもできます。
答え2
grep -l '[07]' DirToYourFiles/* | xargs rm -f
grep -l
ファイル名のみをリストすることを意味する
[07]
0または7を意味する
xargs
それらを命令にします。
これは、ファイル名に空白、改行、一重引用符、二重引用符、またはバックスラッシュ文字が含まれていないことを前提としています。GNU ユーティリティを使用すると、次の方法で信頼性を高めることができます。
grep -lZ '[07]' DirToYourFiles/* | xargs -r0 rm -f