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

时间:2014-03-13 19:04:30

标签: linux unix

如何将'find'的结果(在Linux中)移植到另一个目录?这是我到目前为止所做的。

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

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

6 个答案:

答案 0 :(得分:50)

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

OR

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

答案 1 :(得分:18)

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

答案 2 :(得分:3)

我发现在一个文件夹中有数千个文件非常有用:

ls -U | head -10000 | egrep '\.png$' | xargs -I '{}' mv {} ./png

将前10000个文件中的所有png移动到子文件夹png

答案 3 :(得分:2)

mv $(find . -name '*article*') ../backup

答案 4 :(得分:0)

  • 如何在Linux中将'find'的结果传递给mv
  • 查找+ mv命令

查找。类型的f -newermt“ 2019-01-01”! -newermt“ 2019-05-01” -exec mv {}路径\;

查找路径-type f -newermt“ 2019-01-01”! -newermt“ 2019-05-01” -exec mv {}路径\;

查找/ Directory / filebox / -type f -newermt“ 2019-01-01”! -newermt“ 2019-05-01” -exec mv {} ../filemove/ \;

答案 5 :(得分:-1)

xargs是你的伙伴(当你有多个行动要做时)!

以我所展示的方式使用它也会给你很大的控制权。

find ./ -name '*article*' | xargs -n1 sh -c "mv {}  <path/to/target/directory>"

<强>解释

  1. -n1
  2. 提前为每项操作考虑的行数

    1. sh -c
    2. 要执行的shell命令,按照先前的条件为其提供行

      1. "mv {} /target/path"
      2. move命令将采用两个参数 -

        1)来自操作1的行,即{},值自动替换

        2)指定移动命令的目标路径

        注意:“Double Quotes”被指定为允许从xargs接收参数的shell命令的任意数量的空格或参数