rsync только определенные типы файлов в подкаталогах с фиксированной максимальной глубиной

rsync только определенные типы файлов в подкаталогах с фиксированной максимальной глубиной

Я хочу синхронизировать все файлы *.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

Связанный контент