这应该是相当简单的,但我似乎无法得到它。很少的上下文,我得到文件让我们说test1.txt...test5.txt
分布在几个目录上。我只是想找到它们,并将它们移动到一个目录。
我可以将xargs
与find
一起使用,但我想在-exec
中使用find
选项。其中所有找到的文件将在mv
命令的一个“instance”中传递(如果我错了,请纠正我),所以这是命令:
find . -name 'text*.txt' -exec mv '{}' collectedDir;
我收到此错误:find: -exec: no terminating ";" or "+"
。我显然使用的是分号。那么导致这个问题的原因是什么呢?
在您提问之前,find
找到了所有文件,我使用print
进行检查,collectedDir
确实存在。
答案 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 \;
您还可以将find
与xargs
结合使用,以避免为每个文件调用mv
命令(如果您有大量文件,可能会更快),例如: / p>
find . -name 'text*.txt' -print0 | xargs -0 mv -t collectedDir
-0
标记“转义”所有可能在文件名中的特殊字符(如空格或分号)。