如何在Linux中将“find”的结果传递给mv

如何将“find”(在Linux中)的结果传输到不同的目录? 这是我迄今为止。

 find./ -name'*文章*'|  mv ../backup 

但它不正确(我得到一个错误缺less文件参数,因为我没有指定一个文件,因为我试图从pipe道中获取它)

find ./ -name '*article*' -exec mv {} ../backup \; 

要么

 find ./ -name '*article*' | xargs -I '{}' mv {} ../backup 

xargs通常用于这个,而mv有一个-t选项来促进这一点。

 find ./ -name '*article*' | xargs mv -t ../backup 

如果你find支持-exec ... \+你可以等价地做

 find ./ -name '*article*' -exec mv -t ../backup {} \+ 

-t选项可能是一个GNU扩展。 当然可以推出自己的产品,也许可以这样

 find ./ -name '*article*' -exec sh -c 'mv "$@" "$0"' ../backup {} \+ 

我们无耻地滥用了这样一个便利的事实: sh -c 'commands'之后的第一个参数最终成为$0的“脚本名称”参数,所以我们甚至不需要shift它。

对于OSX(10.11.5),find命令支持-exec ,这意味着这可以用一个命令来执行,并且不需要管道。

exec将为每个找到的匹配项执行一个命令。 命令中{}的出现将被替换为路径名称。 要终止命令,分号位于引号';'的内部

 find ./ -name '*article*' -exec mv {} ../backup ';'