删除所有符合特定模式的文件

删除所有符合特定模式的文件

我的一个文件夹中有数千个 txt 文件。其中许多文件对我来说都是不必要的。我想一次性删除所有不必要的文件。如果我手动执行此操作(打开每个文件,查看其内容并删除),将需要大量时间和精力。但我有一些不必要的文件所具有的模式(一些单词)(单词是文件的内容,而不是文件的名称)。我需要的文件没有这些模式。因此可以使用这些模式过滤和删除不必要的文件。

为了便于理解,我附上了一张不必要的文件的截图。突出显示的单词可以作为模板。 这

答案1

您可以按以下方式使用命令grep和:xargs

grep -rlZ '=head1 NAME' /target-directory/ | xargs -0 rm -f

grep命令将以递归方式工作-r(在 内),并且仅输出包含模式 的/target-directory/文件的名称。该选项将输出零字节(ASCII NUL 字符),而不是通常跟在文件名后面的字符。-l'=head1 NAME'-Z

此输出将通过管道传输|xargs命令 where-0表示输入项将以空字符而不是空格结尾。将执行的命令rm -f强制删除

谢谢@steeldriver为了答案的最终完善!


此外,您还可以-L1向命令中添加(每次执行读取一行)xargsecho执行试运行:

grep -rlZ '=head1 NAME' /target-directory/ | xargs -L1 -0 echo rm -f

如果要将文件移动到某处而不是删除它们,请修改命令这边走

grep -rlZ '=head1 NAME' /tgt-dir/ | xargs -L1 -0 -I {} echo mv {} /destination-dir/

或者@PerlDuck说“mv还有一个开关-t, --target-directory=DIRECTORY,允许将目录放在第一位,将文件放在最后......这种方式mv不是对每个文件调用一次,而是对一堆文件调用一次。”:

grep -rlZ '=head1 NAME' /tgt-dir/ | xargs -0 echo mv -t /destination-dir/

相关内容