Назад | Перейти на главную страницу

rsync и включить / исключить. Как трудно это может быть?

Я пытаюсь рекурсивно скопировать структуру каталогов / файлов из одного каталога в другой, сохраняя только файлы html. Должен быть простой случай включения / исключения, не так ли?

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

rsync -a --list-only -v SOURCEDIR --exclude='.*' --include='**/*.html' 

Отдает мне все файлы.

rsync -a --list-only -v SOURCEDIR --include='**/*.html' --exclude='*' 

и

rsync -a --list-only -v SOURCEDIR --include='*.html' --exclude='*' 
rsync -a --list-only -v SOURCEDIR --include=*.html --exclude=*

Не давайте мне файлов.

rsync -a --list-only -v SOURCEDIR --include='*.html' --exclude='*.*'

Похоже, он дает мне всю структуру каталогов и только файлы html. Но мне не нужны пустые каталоги.

Помогите!

В Mac OS 10.6

Rsync может сбивать с толку подобные выборочные копии. Я использую следующее, чтобы выполнить задание, которое вы просите:

rsync -avP \
--filter='+ */' \
--filter='+ **/*.html' \
--filter='- *' \
--prune-empty-dirs \
--delete \
/source/ \
/dest/

Обычно вам нужно включить все каталоги в поиск, а затем добавить все *.html файлы в список, все остальные файлы исключены.

В --prune-empty-dirs вариант удобен в использовании, поскольку он исключает любой каталог, в котором нет *.html файл.

Думали ли вы об использовании find для тяжелой работы?

Что-то вроде

find ./ -name "*.html" -exec rsync -R {} /target/base/directory/ \; 

воссоздаст дерево каталогов ./, в котором находятся файлы html, и построит то же самое в каталоге / target / base /

Я не уверен на 100%, что это лучший [0] способ сделать это, но вы можете немного изменить свою последнюю попытку и заставить ее работать. Просто добавьте каталоги подрезки вариант (--prune or -m).

rsync -am --list-only -v SOURCEDIR --include='*.html' --exclude='*.*'

[0] Под «лучшим» я подразумеваю самый чистый и эффективный способ. Кажется, что должен быть более элегантный способ выразить это, но я не знаю, что это такое.