Скопируйте каждый файл всей структуры каталогов в базовый путь другого

У меня есть дерево каталогов с большим количеством файлов. Я хотел бы скопировать все эти файлы в один новый каталог, но со всеми файлами, расположенными в основе папки.

Итак, у меня есть что-то вроде этого:

    images
    ├── avatar.png
    ├── bg.jpg
    ├── checkbox.png
    ├── cross.png
    ├── datatables
    │   ├── back_disabled.png
    │   ├── back_enabled.png
    │   ├── forward_disabled.png
    │   ├── forward_enabled.png
    │   ├── sort_asc.png
    │   ├── sort_asc_disabled.png
    │   ├── sort_both.png
    │   ├── sort_desc.png
    │   └── sort_desc_disabled.png
    ├── exclamation.png
    ├── forms
    │   ├── btn_left.gif
    │   ├── btn_right.gif
    │   ├── checkbox.gif
    │   ├── input
    │   │   ├── input_left-focus.gif
    │   │   ├── input_left-hover.gif
    │   │   ├── input_left.gif
    │   │   ├── input_right-focus.gif
    │   │   ├── input_right-hover.gif
    │   │   ├── input_right.gif
    │   │   ├── input_text_left.gif
    │   │   └── input_text_right.gif
    │   ├── radio.gif
    │   ├── select_left.gif
    │   ├── select_right.gif

И я хотел бы что-то вроде этого:

    new_folder
    ├── avatar.png
    ├── bg.jpg
    ├── checkbox.png
    ├── cross.png
    ├── back_disabled.png
    ├── back_enabled.png
    ├── forward_disabled.png
    ├── forward_enabled.png
    ├── sort_asc.png
    ├── sort_asc_disabled.png
    ├── sort_both.png
    ├── sort_desc.png
    ├── sort_desc_disabled.png
    ├── exclamation.png
    ├── btn_left.gif
    ├── btn_right.gif
    ├── checkbox.gif
    ├── input_left-focus.gif
    ├── input_left-hover.gif
    ├── input_left.gif
    ├── input_right-focus.gif
    ├── input_right-hover.gif
    ├── input_right.gif
    ├── input_text_left.gif
    ├── input_text_right.gif
    ├── radio.gif
    ├── select_left.gif
    ├── select_right.gif

Я почти уверен, что для этого есть команда bash, но я ее еще не нашел. У тебя есть идеи?

CS


person csch    schedule 21.03.2012    source источник


Ответы (4)


вы ищете способы сгладить каталог

find /images -iname '*.jpg' -exec cp --target-directory /newfolder/ {} \;

find все файлы iname в режиме нечувствительного к регистру имени.
cp скопировать один раз в --target-directory с именем /newfolder/.
{} расширить список из find в форму /dir/file.jpg /dir/dir2/bla.jpg.

person cctan    schedule 21.03.2012
comment
у меня не работало с cp: незаконная опция -- -. Ответ Каза сработал для меня - person alexey; 08.03.2016
comment
@alexey Я не могу воспроизвести вашу ошибку, в какой среде вы ее запускали? - person cctan; 08.03.2016
comment
о, вы правы - я использую OSX (10.11.2), встроенный в bash, который, как известно, устарел: GNU bash, версия 3.2.57 (1)-выпуск (x86_64-apple-darwin15) - person alexey; 09.03.2016
comment
Он также не работает на докере на базе альпийских, я получаю следующее cp: unrecognized option: target-directory BusyBox v1.28.4 (2018-07-17 15:21:40 UTC) multi-call binary. - person julianalimin; 03.11.2018

На zsh:

cp /source/**/* /destination

person gbin    schedule 14.02.2016

person    schedule
comment
это действительно лучшее решение. Возможно ли, что вы разберете команду и объясните, что делает какой оператор? f.e -тип? Было бы очень круто! - person y.y; 02.10.2020

person    schedule
comment
Это решение отвечает на вопрос правильно. Она очень похожа на решение под Зш. Итак, почему -1??? - person Grégory Roche; 20.02.2017
comment
Он не копирует скрытые файлы BTW - person Metal3d; 17.05.2017