仅复制目录中的文件

时间:2018-08-22 21:38:30

标签: shell

我有2个目录

       dir1/results1/a.xml
       dir1/results1/b.txt

      dir2/results2/c.xml
      dir2/results2/d.txt

我只想将dir2 / results2文件夹中的文件复制到dir1 / results1文件夹中,以便结果如下:

         dir1/results1/a.xml
         dir1/results1/b.txt
         dir1/results1/c.xml
         dir1/results1/d.txt

我尝试了shell comand

         cp -R dir2/results2/ dir1/results1/

但是它被复制为

          dir1/results1/a.xml
          dir1/results1/b.txt
          dir1/results1/results2

什么是正确的方法?

3 个答案:

答案 0 :(得分:2)

在您的具体情况下

cp dir/results2/* dir/results1

会做你想做的。在两种情况下无法正常工作:

  • 如果您有一个以句点开头的文件,例如 dir / results2 / .abc 。这些文件将不会被复制。

  • 如果在dir / results2中有子目录。尽管确实不会复制它们(根据需要,因为您只想复制文件,而不是目录),但是您会收到一条错误消息,至少不是很优雅。

这两个问题都有解决方案,因此,如果这对您来说是一个问题,请创建一个包含相应主题的单独帖子。

(UPDATE)如果文件名扩展名将生成一个参数行,该参数行的长度比允许的最小值要长(例如,如果目录中有很多文件或行长的文件),那么我的解决方案也不起作用。在这种情况下,类似

find dir/results2 -maxdepth 1  -type f | xargs -i --no-run-if-empty] cp {} dir/results1

这还将解决隐藏文件的问题,如上所述。

答案 1 :(得分:0)

(cd dir1 && find . -maxdepth 1 -type f -print0 | tar -T - --null -cf - ) | (cd dir2 && tar -xf -)

处理所有案件,包括。文件和非常大的文件,但不会复制sibdirs。删除-depth以复​​制sibdirs。需要疯子。

答案 2 :(得分:-1)

svg_image_selector命令非常方便。

尝试一下:

tar

它不仅将复制纯文件,还将复制在tar cf - -C dir2/results2 . | ( cd dir1/results1 ; tar xf - ) 中找到的任何其他文件,例如目录等。