rsync e incluir / excluir. Quão difícil isso pode ser?

6

Estou tentando copiar recursivamente uma estrutura de diretório / arquivo de um diretório para outro, mantendo apenas os arquivos html. Deve ser um caso simples de inclusão / exclusão, não deveria?

Eu só quero imprimir os arquivos primeiro. Quando eu fizer certo, vou copiá-los.

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

Me dá todos os arquivos.

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

e

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

Não me dê arquivos.

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

Parece que me fornece toda a estrutura de diretórios e apenas arquivos html. Mas eu não quero diretórios vazios.

Ajuda!

No Mac OS 10.6

    
por Joe 01.07.2010 / 19:48

3 respostas

0

Já pensou em usar o find para fazer o seu trabalho duro?

Algo ao longo das linhas de

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

irá recriar a árvore de diretórios de ./, na qual os arquivos html são encontrados, e construir o mesmo sob / target / base / directory

    
por 01.07.2010 / 22:24
11

O rsync pode ser confuso sobre cópias seletivas como essa. Eu uso o seguinte para fazer a tarefa que você está pedindo:

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

Basicamente, você precisa incluir todos os diretórios na pesquisa e, em seguida, adicionar todos os arquivos *.html à lista, excluindo todos os outros arquivos.

A opção --prune-empty-dirs é útil para usar, pois exclui qualquer diretório que não tenha um arquivo *.html .

    
por 01.07.2010 / 22:22
0

Eu não tenho 100% de certeza de que esta é a melhor maneira de fazer isso, mas você pode adicionar um pequeno ajuste na sua última tentativa e fazê-la funcionar. Basta adicionar a opção diretórios de remoção ( --prune or -m ).

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

[0] Por "melhor", quero dizer a maneira mais limpa e eficiente. Parece que deveria haver uma maneira mais elegante de expressar isso, mas não sei de antemão o que é isso.

    
por 01.07.2010 / 21:21

Tags