
Я хочу синхронизировать все файлы *.sh в одном подкаталоге. Я пробовал этот cmd, но синхронизируются все файлы в каталоге, а не только определенные типы файлов.
rsync -vr -n --include="*.sh" --exclude="*/*/" --prune-empty-dirs /source /target
Я также попробовал добавить фильтр вроде
--filter="+ *.sh"
но это не изменило результат. Другой фильтр
rsync -vr -n --include="*.sh" --filter="-! *.sh" --exclude="*/*/" --prune-empty-dirs
дает мне пустой список. Если я исключаю "*", я также исключаю "*.sh"... Что не так? Спасибо!
Глубина должна быть один - имя подкаталога неизвестно. Например,
home/subdirectory1/subsubdirectory/subsubsubdirectory/file.sh
home/subdirectory1/file1.sh
home/subdirectory2/file2.sh
home/subdirectory3/file
В приведенном выше примере rsync
следует начать с домашней папки, синхронизировать иерархию каталогов и только файлы file1.sh
иfile2.sh
решение1
Ваши примеры, похоже, не соответствуют вашему описанию. Я думаю, вы говорите, что хотите этого,
- сопоставьте все
*.sh
файлы в неизвестном подкаталоге, расположенном непосредственно под вашим/home
- поместить файлы в неизвестный подкаталог на целевом компьютере
- не включать
/home
в путь назначения
Если посмотреть с /home
, эта команда сопоставит все файлы */*.sh
и скопирует их вместе с их частичным путем в целевой каталог. (Удалите , --dry-run
если вы удовлетворены предполагаемым результатом.)
rsync --dry-run -avR /home/./*/*.sh /target
Например, /home/subdir/file.sh
будет скопировано в/target/subdir/file.sh