rsync рекурсивно к плоскому месту назначения

Я хотел бы запустить rsync в неизвестной структуре каталогов и синхронизировать только файлы, а не каталоги.

Я пробовал множество способов, в том числе обвязку находки, но безуспешно.

пример источника dir:

somedir/
   file1.txt
   file2.txt
     anotherdir/
        file3.txt

пример назначения dir:

file1.txt
file2.txt
file3.txt
1
задан 8 July 2019 в 00:38

1 ответ

Вы могли использовать rsync в нерекурсивном режиме (без -r) вместе с рекурсивными шариками оболочки. Тем путем Вы даете ему список всех файлов и подкаталогов в Вашей папке как аргументы, но это проигнорирует все каталоги и только передаст файлы.

Примечание: рекурсивные шарики (**) потребуйте globstar опция оболочки, которая будет установлена в Bash. Включите его для текущей сессии с shopt -s globstar или не прокомментируйте ту строку в Вашем .bashrc файл для включения его постоянно.

$ tree .
.
└── somedir
    ├── anotherdir
    │  └── file3.txt
    ├── file1.txt
    └── file2.txt

$ rsync ** myserver:/tmp/rsynctest
skipping directory somedir
skipping directory anotherdir

$ ssh myserver tree /tmp/rsynctest
/tmp/rsynctest
├── file1.txt
├── file2.txt
└── file3.txt

Если Вы хотите указать другие аргументы rsync это подразумевает рекурсию (как, например. -a), можно явно отключить рекурсию снова с --no-r вместо этого.

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

$ rsync -avz --no-r somewhere/local/**/*.txt myserver:/tmp/rsynctest/
skipping directory .
skipping directory somedir
skipping directory anotherdir
file1.txt
file2.txt
file3.txt

sent 231 bytes  received 73 bytes  202.67 bytes/sec
total size is 0  speedup is 0.00
0
ответ дан 7 December 2019 в 19:39

Другие вопросы по тегам:

Похожие вопросы: