Como posso excluir todos os subdiretórios, mas incluir arquivos de um diretório no rsync?

7

Eu quero fazer backup do meu sistema Ubuntu e tenho duas partições para cuidar: Uma é / , outra é /home .

Provavelmente, quero fazer o backup de / . Isso não é tão grande assim que eu posso carregá-lo no meu cartão SD, sendo responsivo o suficiente para me fazer querer ter uma imagem dele (é por isso que estou tentando usar o rsync neste momento).

E sobre /home , há muitos subdiretórios com os quais não me importo muito, por isso não os incluirei, mas quero cuidar dos arquivos, como .bash_history , .bashrc , .face e assim por diante.

Por isso, quero excluir todos os subdiretórios, incluindo arquivos em /home . Como posso conseguir isso?

--exclude "*/" não estava funcionando. "/*/" , "/**/" , --include "*" --exclude */ não mostra o que eu quero. pelo menos copiou a pasta de origem, sem copiar nada dentro dela.

    
por Dinir 04.06.2015 / 09:32

3 respostas

9

Experimente este comando:

rsync -a -f"- */" -f"+ *" /home/user/ destination/

man rsync

-f, --filter=RULE           add a file-filtering RULE

A regra para incluir todos os arquivos * e excluir os dirs */

Outra abordagem para usar a cópia normal cp

cp /home/usr/* /destination

você pode se livrar dos erros sobre dirs usando redirecionamento

cp /home/usr/* /destination 2>/dev/null

Isso só copia os arquivos dentro da sua casa sem os diretórios

    
por Maythux 04.06.2015 / 10:05
2

Se você quiser resolver isso com os parâmetros --include e --exclude , altere a ordem deles: primeiro exclua o que você deseja e inclua tudo. Eu faço normalmente com este comando:

rsync -vazhP path/to/source path/to/dest --exclude '*/*/' --include '*'
    
por Mattia72 13.11.2016 / 07:58
0

Por padrão, rsync não copia diretórios. Talvez você esteja usando o sinalizador -a . Se esse for o caso, observe que, de acordo com a página do manual , -a é equivalente a -rlptgoD , por isso, se você não quiser recorrer, use apenas -lptgoD .

    
por Brian Moths 08.03.2018 / 14:04

Tags