如何通过管道将“查找”(在 Linux 中)的结果移动到不同的目录?这就是我到目前为止所拥有的。
find ./ -name '*article*' | mv ../backup
但它还不正确(我收到一个错误缺少文件参数,因为我没有指定文件,因为我试图从管道中获取它)
原文由 user1015214 发布,翻译遵循 CC BY-SA 4.0 许可协议
如何通过管道将“查找”(在 Linux 中)的结果移动到不同的目录?这就是我到目前为止所拥有的。
find ./ -name '*article*' | mv ../backup
但它还不正确(我收到一个错误缺少文件参数,因为我没有指定文件,因为我试图从管道中获取它)
原文由 user1015214 发布,翻译遵循 CC BY-SA 4.0 许可协议
xargs
通常用于此目的,而 Linux 上的 mv
有一个 -t
选项来促进这一点。
find ./ -name '*article*' | xargs mv -t ../backup
如果您的 find
支持 -exec ... \+
你可以等效地做
find ./ -name '*article*' -exec mv -t ../backup {} \+
-t
选项是 GNU 扩展,因此它不能移植到没有 GNU coreutils
的系统(尽管我见过的每个适当的 Linux 都有,除了 Busybox )。对于完整的 POSIX 可移植性,当然可以推出自己的替代品,也许像
find ./ -name '*article*' -exec sh -c 'mv "$@" "$0"' ../backup {} \+
我们无耻地滥用了一个方便的事实,即 sh -c 'commands'
之后的第一个参数最终成为 $0
中的“脚本名称”参数,因此我们甚至不需要 shift
它。
可能也见 https://mywiki.wooledge.org/BashFAQ/020
原文由 tripleee 发布,翻译遵循 CC BY-SA 4.0 许可协议
7 回答5.3k 阅读
4 回答4k 阅读
2 回答5.9k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
1 回答2.4k 阅读✓ 已解决
2 回答816 阅读✓ 已解决
2 回答3.3k 阅读
或者