如何将 find 命令的输出移动到另一个目录?

如何将 find 命令的输出移动到另一个目录?

我希望此命令的输出find /home -name *.pdf 将搜索结果中的文件移动到另一个目录,例如使用管道。我该怎么做?

答案1

您不需要任何管道,也xargs可以将文件名作为 的参数mv

mv只需在以下-exec操作中使用find

find /home -type f -name '*.pdf' -exec mv -t /destination {} + 
  • 替换/destination为实际目标目录
  • find将处理所有可能的文件名
  • findARG_MAX将通过一次传递尽可能多的文件名来处理,这样就不会触发ARG_MAX
  • 如果你只查找文件(大概在这种情况下),通过添加来限制搜索向量-type f
  • 引用 glob 扩展,'*.pdf'以便 shell 不会事先扩展它们,而是find处理它们

如果由于某些奇怪的原因,或者出于学习目的,您必须使用 pipe- xargs

find /home -type f -name '*.pdf' -print0 | xargs -0 mv -t /destination  

答案2

如果您的 pdf 名称中没有空格,另一种方法是在终端中运行此命令:

mv $(find /home -type f -name '*.pdf') ./destination

$()将命令运行的输出 ( )应用于find /home -type f -name '*.pdf'其外部的命令 ( mv [...] ./destination)。

相关内容