Я хотел бы запустить rsync в неизвестной структуре каталогов и синхронизировать только файлы, а не каталоги.
Я пробовал множество способов, в том числе обвязку находки, но безуспешно.
пример источника dir:
somedir/
file1.txt
file2.txt
anotherdir/
file3.txt
пример назначения dir:
file1.txt
file2.txt
file3.txt
Вы могли использовать 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