Я пытаюсь рекурсивно скопировать структуру каталогов / файлов из одного каталога в другой, сохраняя только файлы 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] Под «лучшим» я подразумеваю самый чистый и эффективный способ. Кажется, что должен быть более элегантный способ выразить это, но я не знаю, что это такое.