如何在 Linux 中将“find”的结果通过管道传输到 mv

新手上路,请多包涵

如何通过管道将“查找”(在 Linux 中)的结果移动到不同的目录?这就是我到目前为止所拥有的。

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

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

原文由 user1015214 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答
find ./ -name '*article*' -exec mv {}  ../backup  \;

或者

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

原文由 Amit 发布,翻译遵循 CC BY-SA 3.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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题