我有以下命令:
find . -type d -mtime 0 -exec mv {} /path/to/target-dir \;这会将创建的目录移动到另一个目录。我怎样才能用xargs代替exec来做同样的事情。
发布于 2012-12-16 16:42:08
如果您有GNU mv (以及find和xargs),您可以对mv使用-t选项(对于find使用-print0,对于xargs使用-0 ):
find . -type d -mtime -0 -print0 | xargs -0 mv -t /path/to/target-dir请注意,find的现代版本(与POSIX2008兼容)支持+而不是;,并且在不使用xargs的情况下其行为与xargs大致相同
find . -type d -mtime -0 -exec mv -t /path/to/target-dir {} +这使得find组可以方便地将多个文件(目录)名放入程序的单个调用中。您无法控制xargs提供的传递给mv的参数数量,但您很少真正需要它。这仍然取决于GNU mv的-t选项。
发布于 2013-07-21 00:53:03
对于BSD xargs (适用于OS X和FreeBSD),您可以使用为此构建的-J:
find . -name some_pattern -print0 | xargs -0 -J % mv % target_location这会将任何与.中的some_pattern匹配的内容移动到target_location
对于GNU xargs (用于、Linux、和Cygwin),请改用-I:
find . -name some_pattern -print0 | xargs -0 -I % mv % target_locationGNU xargs的不推荐使用的-i选项隐含-I{},可按如下方式使用:
find . -name some_pattern -print0 | xargs -0 -i mv {} target_location注意,BSD xargs也有一个-I选项,但它做了一些其他的事情。
发布于 2014-03-13 17:19:10
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扩展。)
当我不确定目标文件是否存在时,我通常在脚本中使用它。
https://stackoverflow.com/questions/13899746
复制相似问题