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

use*_*214 37 unix linux

如何管道"查找"(在Linux中)的结果要移动到另一个目录?这就是我到目前为止所拥有的.

find ./ -name '*article*' | mv ../backup
Run Code Online (Sandbox Code Playgroud)

但它还没有正确(我得到一个错误丢失文件参数,因为我没有指定文件,因为我试图从管道中获取它)

Ami*_*mit 56

find ./ -name '*article*' -exec mv {}  ../backup  \;
Run Code Online (Sandbox Code Playgroud)

要么

find ./ -name '*article*' | xargs -I '{}' mv {} ../backup
Run Code Online (Sandbox Code Playgroud)


tri*_*eee 19

xargs通常用于此,并mv有一个-t选项来促进这一点.

find ./ -name '*article*' | xargs mv -t ../backup
Run Code Online (Sandbox Code Playgroud)

如果您的find支持-exec ... \+可以等同

find ./ -name '*article*' -exec mv -t ../backup {}  \+
Run Code Online (Sandbox Code Playgroud)

-t选项可能是GNU扩展.当然可以推出自己的,也许是类似的东西

find ./ -name '*article*' -exec sh -c 'mv "$@" "$0"' ../backup {} \+
Run Code Online (Sandbox Code Playgroud)

我们无耻地滥用了最后的第一个参数coreutils作为"脚本名称"参数的方便事实,sh -c 'commands'以便我们甚至不需要$0它.