使用从终端查找的移动
Using move with find from terminal
这应该很简单,但我似乎无法理解。上下文很少,我得到的文件比方说 test1.txt...test5.txt
分布在几个目录中。我只是想找到它们,并将它们移动到一个目录中。
我可以将 xargs
与 find
一起使用,但我想在 find
中使用 -exec
选项。其中所有找到的文件将在 "instance" 的 mv
命令中传递(如果我错了请纠正我),所以这里是命令:
find . -name 'text*.txt' -exec mv '{}' collectedDir;
我收到此错误:find: -exec: no terminating ";" or "+"
。我显然正在使用分号。那么造成这种情况的问题可能是什么?
在你问之前,find
确实找到了所有的文件,我用print
查了一下,collectedDir
确实存在。
你的 shell 在 find
之前看到 ;
然后吞下它。
你需要逃避它 \;
这样 shell 就不会吃掉它。
也就是说 -exec .. \;
将 运行 命令一次 对每个找到的文件 而不是总共一次。
至 运行 一次性获取尽可能多的文件 -exec ... +
。
find . -name 'text*.txt' -exec mv '{}' collectedDir +
正如@EtanReisner post 中指出的那样,您忘记了转义分号,如果您不 shell 将其解释为命令分隔符;尝试:
find . -name 'text*.txt' -exec mv '{}' collectedDir \;
您还可以将 find
与 xargs
结合使用,以避免为每个文件调用 mv
命令(如果您有很多文件,这可能会更快),例如:
find . -name 'text*.txt' -print0 | xargs -0 mv -t collectedDir
-0
标志 "escape" 所有可能出现在文件名中的特殊字符(再次像空格或分号)。
这应该很简单,但我似乎无法理解。上下文很少,我得到的文件比方说 test1.txt...test5.txt
分布在几个目录中。我只是想找到它们,并将它们移动到一个目录中。
我可以将 xargs
与 find
一起使用,但我想在 find
中使用 -exec
选项。其中所有找到的文件将在 "instance" 的 mv
命令中传递(如果我错了请纠正我),所以这里是命令:
find . -name 'text*.txt' -exec mv '{}' collectedDir;
我收到此错误:find: -exec: no terminating ";" or "+"
。我显然正在使用分号。那么造成这种情况的问题可能是什么?
在你问之前,find
确实找到了所有的文件,我用print
查了一下,collectedDir
确实存在。
你的 shell 在 find
之前看到 ;
然后吞下它。
你需要逃避它 \;
这样 shell 就不会吃掉它。
也就是说 -exec .. \;
将 运行 命令一次 对每个找到的文件 而不是总共一次。
至 运行 一次性获取尽可能多的文件 -exec ... +
。
find . -name 'text*.txt' -exec mv '{}' collectedDir +
正如@EtanReisner post 中指出的那样,您忘记了转义分号,如果您不 shell 将其解释为命令分隔符;尝试:
find . -name 'text*.txt' -exec mv '{}' collectedDir \;
您还可以将 find
与 xargs
结合使用,以避免为每个文件调用 mv
命令(如果您有很多文件,这可能会更快),例如:
find . -name 'text*.txt' -print0 | xargs -0 mv -t collectedDir
-0
标志 "escape" 所有可能出现在文件名中的特殊字符(再次像空格或分号)。