首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用xargs将目录从查找结果映射到另一个目录

使用xargs将目录从查找结果映射到另一个目录
EN

Stack Overflow用户
提问于 2012-12-16 16:32:06
回答 5查看 47.1K关注 0票数 33

我有以下命令:

代码语言:javascript
复制
find . -type d -mtime 0 -exec mv {} /path/to/target-dir \;

这会将创建的目录移动到另一个目录。我怎样才能用xargs代替exec来做同样的事情。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-12-16 16:42:08

如果您有GNU mv (以及findxargs),您可以对mv使用-t选项(对于find使用-print0,对于xargs使用-0 ):

代码语言:javascript
复制
find . -type d -mtime -0 -print0 | xargs -0 mv -t /path/to/target-dir

请注意,find的现代版本(与POSIX2008兼容)支持+而不是;,并且在不使用xargs的情况下其行为与xargs大致相同

代码语言:javascript
复制
find . -type d -mtime -0 -exec mv -t /path/to/target-dir {} +

这使得find组可以方便地将多个文件(目录)名放入程序的单个调用中。您无法控制xargs提供的传递给mv的参数数量,但您很少真正需要它。这仍然取决于GNU mv-t选项。

票数 40
EN

Stack Overflow用户

发布于 2013-07-21 00:53:03

对于BSD xargs (适用于OS X和FreeBSD),您可以使用为此构建的-J

代码语言:javascript
复制
find . -name some_pattern -print0 | xargs -0 -J % mv % target_location

这会将任何与.中的some_pattern匹配的内容移动到target_location

对于GNU xargs (用于、Linux、和Cygwin),请改用-I

代码语言:javascript
复制
find . -name some_pattern -print0 | xargs -0 -I % mv % target_location

GNU xargs的不推荐使用的-i选项隐含-I{},可按如下方式使用:

代码语言:javascript
复制
find . -name some_pattern -print0 | xargs -0 -i mv {} target_location

注意,BSD xargs也有一个-I选项,但它做了一些其他的事情。

票数 41
EN

Stack Overflow用户

发布于 2014-03-13 17:19:10

代码语言:javascript
复制
find ./ -maxdepth 1 -name "some-dir" -type d -print0 | xargs -0r mv -t x/

find:使用选项-print0,输出将以‘\0’结束;

xargs:使用选项-0,它将按'\0‘分割参数,但是使用空格,-r表示no-run- if -,因此如果find没有得到任何输出,您将不会得到任何错误。( -r是一个GNU扩展。)

当我不确定目标文件是否存在时,我通常在脚本中使用它。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13899746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档