我的一个文件夹中有数千个 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
向命令中添加(每次执行读取一行)xargs
并echo
执行试运行:
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/