递归复制文件的Unix命令

Tho*_*ggi 2 unix cp macos

我需要一个 unix 命令来执行以下操作:

目录结构

/project
    /images
        /products
            /cup.jpg
            /laptop.jpg
        /designs
            /alpha.jpg
            /beta.jpg
            /gamma.jpg
        /team
            /jeff.jpg
        /locations
            /new-york.jpg
Run Code Online (Sandbox Code Playgroud)

我想要一个命令将所有文件*而不是文件夹从“图像”目录递归复制到这样的东西。

/assets
    /cup.jpg
    /laptop.jpg
    /alpha.jpg
    /beta.jpg
    /gamma.jpg
    /jeff.jpg
    /new-york.jpg       
Run Code Online (Sandbox Code Playgroud)

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

Lri*_*Lri 6

这会为每个文件执行 cp,因此如果有很多小文件(但不是典型图像),它会明显变慢:

find project -name \*.jpg -exec cp {} assets \;
Run Code Online (Sandbox Code Playgroud)

这一次需要多个参数:

find project -name \*.jpg -print0 | xargs -0 -I% cp % assets
Run Code Online (Sandbox Code Playgroud)

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

击4个支持**shopt -s globstar

cp project/**/*.jpg assets
Run Code Online (Sandbox Code Playgroud)