用于递归复制文件的 Unix 命令

用于递归复制文件的 Unix 命令

我需要一个unix命令来执行以下任务:

目录结构

/project
    /images
        /products
            /cup.jpg
            /laptop.jpg
        /designs
            /alpha.jpg
            /beta.jpg
            /gamma.jpg
        /team
            /jeff.jpg
        /locations
            /new-york.jpg

我想要一个命令来将所有文件*而不是文件夹从“图像”目录中递归地复制到类似这样的内容。

/assets
    /cup.jpg
    /laptop.jpg
    /alpha.jpg
    /beta.jpg
    /gamma.jpg
    /jeff.jpg
    /new-york.jpg       

我试过这个但它只是递归复制文件夹cp -r ./project/images/* ./assets/

答案1

这将对每个文件执行 cp,因此如果有很多小文件(但典型图像则不会),速度可能会明显变慢:

find project -name \*.jpg -exec cp {} assets \;

每次需要多个参数:

find project -name \*.jpg -print0 | xargs -0 -I% cp % assets

如果没有 -0,包含单引号或双引号的文件名将导致类似错误xargs: unterminated quote

Bash 4支持:**shopt -s globstar

cp project/**/*.jpg assets

相关内容