【问题标题】:Find folder by name then copy files按名称查找文件夹,然后复制文件
【发布时间】:2018-05-04 06:26:24
【问题描述】:

我需要找到名为“child”的子目录并将这些文件夹中的文件复制到新目录。无法让它工作。

我可以找到子目录,但我无法从中复制文件。

> find /Volumes/COMMON-LIC-PHOTO-1/STUDIO-COMPLETE/ISSUETRAK/2016/03_2016 -type d -iname child

上面将找到 03_2016 中名为“child”的所有子目录,但我现在如何复制这些目录中的文件?

我试过了,但问题是它似乎想复制目录本身而不仅仅是文件:

> find /Volumes/COMMON-LIC-PHOTO-1/STUDIO-COMPLETE/ISSUETRAK/2016/03_2016 -type d -iname child | xargs cp '{}' /Volumes/COMMON-LIC-PHOTO-1/STUDIO-COMPLETE/ISSUETRAK/TEST \;

我不能让它只针对文件。

【问题讨论】:

    标签: linux macos unix terminal


    【解决方案1】:

    这可能比上面的答案干净一点:

    find $(find /Volumes/COMMON-LIC-PHOTO-1/STUDIO-COMPLETE/ISSUETRAK/2016/03_2016 -type d -iname child | xargs) -type f -exec cp {} /Volumes/COMMON-LIC-PHOTO-1/STUDIO-COMPLETE/ISSUETRAK/TEST \;
    

    两次调用 find,一次调用 xargs。与其他答案一样,这也会覆盖重复的文件名。

    【讨论】:

    • 它有效,谢谢!我知道发生了什么,COMMON-LIC-PHOTO 最后不应该有 -1 (有时它会安装两次并这样做,完全是一个单独的问题!)。
    【解决方案2】:

    你已经接近了:

    > find $YOUR_PATH/03_2016/ -type d -iname child | xargs -I {} find -type f {} | xargs -I {} cp {} /Volumes/COMMON-LIC-PHOTO-1/STUDIO-COMPLETE/ISSUETRAK/TEST
    

    注意:您可能会覆盖在最终目的地共享相同名称的文件

    【讨论】:

    • 啊,我知道你要去哪里了。我收到错误-bash: /Volumes/COMMON-LIC-PHOTO/STUDIO-COMPLETE/ISSUETRAK/2016/03_2016: is a directory,它指的是目标。不知道为什么会抱怨,当然是目录。
    • 确保第二个发现是-type f
    猜你喜欢
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 2018-09-06
    • 2015-04-10
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    • 2013-10-29
    相关资源
    最近更新 更多