查找与模板匹配的文件并删除

查找与模板匹配的文件并删除

我有大量的文件夹和文件。我需要解析它并只找到那些具有扩展名的文件xmp以最终删除它们。

我怎样才能实现这一点并跟踪已删除文件的名称?

查找:我知道我可以使用find /path -name "*.xmp" 但是如何在输出上运行两个命令?保留文件路径和名称removelist.txt并将其删除。

答案1

与GNU找到的 -fprint-delete行动:

find . -name "*.xmp" -fprint "removelist.txt" -delete
  • -fprint file- 将完整文件名打印到 file 中file。运行时如果file不存在find则创建;如果确实存在,则会被截断。
  • -delete- 删除文件

答案2

要记录已成功删除的文件,您可以执行以下操作:

find . -name '*.xmp' -exec rm -f {} \; -print > removed.txt

仅当操作成功(即成功)时,该-print操作才会运行。-execrm

在某些find实现中,您可以替换为,-exec rm -f {} \;-delete避免为每个文件运行一个命令并避免一些竞争条件(最初是 FreeBSD 扩展,但现在由 GNUfind和其他一些扩展支持)。

答案3

一种方法是使用以下命令执行复合 shell 命令-exec

find /path -name '*.xmp' -exec sh -c 'echo "$1" >> removelist.txt && rm -f "$1"' sh {} \;

在子 shell 内,两者echo(附加到removelist.txtrm将针对每个找到的文件运行。

注意:最后一个sh是因为我们正在使用-c.对于该标志,后面的第一个参数是 param 0 或$0应该是 shell 的名称。

必须承认,@RomanPerekhrest 对于这个特殊情况有一个更好的答案,但是使用这里的技术,你可以做各种可能没有专用find标志的事情。:)

相关内容