![](/img/trans.png)
[英]Linux: Find Images greater than 500x500 then move to some folder (Find+Xargs+Mv)
[英]linux find: move files by xargs
应该如何解决? 我正在学习教程,但收到此错误:
$ find ~/Desktop -name “*.jpg” -o -name “*.gif” -o -name “*.png” -print0 | xargs -0 mv –target-directory ~/Pictures
mv: cannot stat `–target-directory': No such file or directory
*我对如何使用xargs执行此命令感兴趣!
您不需要使用xargs
, find
可以在匹配项上执行命令:
find ~/Desktop -name “*.jpg” -o -name “*.gif” -o -name “*.png” -exec mv \{\} ~/Pictures \;
您可以在-exec
之后和转义的分号\\;
前给出命令\\;
。 \\{\\}
被替换为匹配的文件名。
从man find
:
-exec command ;
执行命令; 如果返回0状态,则为true。 以下所有要查找的参数都将被视为命令的参数,直到由';'组成的参数为止 遇到。 字符串'{}'被当前文件名替换,该文件名在命令的参数中出现的所有位置,而不仅仅是在find的某些版本中单独出现的参数中。 这两种构造都可能需要转义(带有'\\')或加引号,以防止它们被外壳扩展。 有关使用-exec选项的示例,请参见示例部分。 对于每个匹配的文件,指定的命令运行一次。 该命令在起始目录中执行。 -exec操作的使用不可避免地存在安全问题; 您应该改用-execdir选项。
注意,必须对分号和{}进行转义。
使用查找和执行
$ find ~/Desktop -name "*.jpg" -exec mv '{}' /tmp/target/ \; -or -name "*.gif" -exec mv '{}' /tmp/target/ \; -or -name "*.png" -exec mv '{}' /tmp/target/ \;
使用xargs
$ find ~/Desktop -name "*.jpg" -or -name "*.gif" -or -name "*.png" | xargs -I SRCFILE mv SRCFILE /tmp/target/
我相信-target-directory
应该是--target-directory
或-t
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.