如何将'find'的结果(在Linux中)移植到另一个目录?这是我到目前为止所做的。
find ./ -name '*article*' | mv ../backup
但它还没有正确(我得到一个错误丢失文件参数,因为我没有指定文件,因为我试图从管道中获取它)
答案 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)
查找。类型的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>"
<强>解释强>
-n1
提前为每项操作考虑的行数
sh -c
要执行的shell命令,按照先前的条件为其提供行
"mv {} /target/path"
move命令将采用两个参数 -
1)来自操作1的行,即{},值自动替换
2)指定移动命令的目标路径
注意:“Double Quotes”被指定为允许从xargs接收参数的shell命令的任意数量的空格或参数