我的目录中有一个文件列表,我需要删除每个包含 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