使用从终端查找移动

时间:2015-10-14 13:32:42

标签: shell terminal find

这应该是相当简单的,但我似乎无法得到它。很少的上下文,我得到文件让我们说test1.txt...test5.txt分布在几个目录上。我只是想找到它们,并将它们移动到一个目录。

我可以将xargsfind一起使用,但我想在-exec中使用find选项。其中所有找到的文件将在mv命令的一个“instance”中传递(如果我错了,请纠正我),所以这是命令:

find . -name 'text*.txt' -exec mv '{}' collectedDir;

我收到此错误:find: -exec: no terminating ";" or "+"。我显然使用的是分号。那么导致这个问题的原因是什么呢?

在您提问之前,find找到了所有文件,我使用print进行检查,collectedDir确实存在。

2 个答案:

答案 0 :(得分:1)

您的shell在;之前看到find并吞下它。

你需要逃脱它\;所以shell不能吃掉它。

-exec .. \;将为找到的每个文件一次运行命令

要为尽可能多的文件运行一次,您需要-exec ... +

find . -name 'text*.txt' -exec mv '{}' collectedDir +

答案 1 :(得分:1)

正如在@EtanReisner帖子中指出的那样,如果你不将shell解释为命令分隔符,你就忘了转义分号;试试:

find . -name 'text*.txt' -exec mv '{}' collectedDir \;

您还可以将findxargs结合使用,以避免为每个文件调用mv命令(如果您有大量文件,可能会更快),例如: / p>

find . -name 'text*.txt' -print0 | xargs -0 mv -t collectedDir

-0标记“转义”所有可能在文件名中的特殊字符(如空格或分号)。