列出包含某个文件的所有子目录,然后将这些目录复制到某处

时间:2016-11-29 16:19:09

标签: bash directory copy find

从我当前的目录中我有子目录。我想列出一个子目录,其中包含以449.ss结尾的文件。

我可以这样做:

find . -iname "*-449.ss" | sed -e 's!/[^/]*$!!' -e 's!^\./!!' | sort -u

但是我想将所有这些目录复制到新目录correct。我试过了

$ find . -iname "*-449.ss" | sed -e 's!/[^/]*$!!' -e 's!^\./!!' | sort -u | xargs -0 -I{} cp -r {} correct/
cp: cannot stat `polyid4ssnps105\npolyid4ssnps106\npolyid4ssnps107\n': File name too long

我尝试传递给xargs。但是,这已将列表视为单个字符串。

我哪里出错了?

感谢。

1 个答案:

答案 0 :(得分:1)

xargs -l ...

并删除参数-0

man xargs:

   -l[max-lines], --max-lines[=max-lines]
          Synonym for the -L option.  Unlike -L, the max-lines argument is
          optional.  If max-lines is not specified, it  defaults  to  one.
          The  -l  option is deprecated since the POSIX standard specifies
          -L instead.