2

Мне нужна команда Unix для следующего:

Структура каталогов

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

Я хотел бы, чтобы одна команда рекурсивно копировала все файлы *, а не папки из каталога "images" в нечто подобное.

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

Я попробовал это, но он просто скопировал папки рекурсивно cp -r ./project/images/* ./assets/

1 ответ1

6

Это выполняет 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .