Rsync сделать плоскую копию

Я пытаюсь написать скрипт, который копирует все файлы одного каталога (с подкаталогами) в корень другого каталога.

Итак, представьте, что у меня есть эта файловая структура:

/
pic.JPG
PIC5.JPG
FOLDER
  pic2.JPG
  pic3.JPG
  FOLDER2
    pic4.JPG

Я хочу, чтобы все файлы .JPG из этого каталога были скопированы в другое место. Но мне не нужна структура каталогов, только файлы.

Вот что у меня есть:

"sudo rsync -aq  --include '*/' --include '*.JPG' --exclude '*\' /source/picturesRoot/ /destination/flatView/

Но он также копирует каталоги :( Я нашел эту ссылку в stackoverflow: структура">rsync : рекурсивно синхронизировать все файлы, игнорируя структуру каталогов

Я посмотрел на решение и не увидел большой разницы с моей командой, кроме * и . в пути. Я пробовал, но это не сработало.

Я надеюсь, что кто-нибудь может мне помочь, спасибо.


person Bosiwow    schedule 07.07.2014    source источник


Ответы (1)


Этот ответ не может работать для вас, потому что ваши изображения не находятся на одном уровне в каталогах. В rsync нет возможности пропустить создание структуры каталогов. В ссылке, которую вы дали, она работает, потому что пользователь явно выбирает исходные файлы с *.

Вы можете попробовать что-нибудь с find и rsync. Find найдет файлы и rsync скопирует их.

Вот решение:

find /source/picturesRoot -type f -name "*.JPG" -exec rsync -a {} /destination/flatView/ \;

Будьте осторожны, если два файла имеют одинаковое имя, только один из них будет в целевом каталоге.

person kranteg    schedule 07.07.2014
comment
хм посмотрю. - person Bosiwow; 07.07.2014
comment
@ user2815780 Я добавил решение с помощью find и rsync. Я пробовал, работает. - person kranteg; 07.07.2014
comment
большое спасибо, будем пробовать. и я почти уверен, что не будет двух файлов с одинаковым именем. - person Bosiwow; 07.07.2014
comment
Для более эффективного решения (только 1 вызов rsync) см. эта запись - person eold; 02.12.2014
comment
Упомянутое в комментарии более эффективное решение требует Bash 4.0 или новее. - person dbainbridge; 13.02.2016