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

13

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

Eu provavelmente vou querer fazer backup /. Isso não é tão grande assim, para que eu possa carregá-lo no meu cartão SD, enquanto sou responsivo o suficiente para me fazer querer ter uma imagem dele (é por isso que estou tentando usar o rsync neste momento).

E cerca /home, tem muitos subdiretórios que não se preocupam muito, então eu não vou provável incluí-los, mas eu quero tomar cuidado com arquivos em lá, tais como .bash_history, .bashrc, .facee assim por diante.

Então, eu quero excluir todos os subdiretórios ao incluir arquivos /home. Como posso conseguir isso?

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

Dinir
fonte

Respostas:

17

Tente 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 regular cp

cp /home/usr/* /destination

você pode se livrar dos erros sobre diretórios usando o redirecionamento

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

Isso copia apenas os arquivos dentro de sua casa sem os diretórios

Maythux
fonte
/ proc tem um sistema de arquivos irreal virtual, você deve excluí-lo do backup, você também deve excluir a tmp e / run /
Maythux
Meu comando original para fazer backup de coisas era assim:rsync -r -t -p -o -g -v --progress --delete --modify-window=1 -l -H -b -s --exclude home/dinir/ --exclude media/ --exclude proc/kcore / /home/dinir/Temporal Site for Storing Backups
Dinir
/ proc, / tmp e / run, verifique! De qualquer forma, como você pode ver no meu comentário, eu deveria fazer backup de todo o sistema de arquivos raiz, excluindo o diretório inicial, com poucas exceções. Colocar o -f" */" -f"+ *"código no meu código seria seguro? Talvez fosse assim -f"- home/dinir/*/" -f"+ home/dinir/*"?
Dinir
você deve usá-lo como tão-f"- home/dinir/*/" -f"+ home/dinir/*"
Maythux
mas eu conselho utilização para uso cp para a sua casa, é muito mais fácil
Maythux
3

Se você deseja resolver isso com os parâmetros --includee --exclude, deve alterar a ordem deles: primeiro exclua o que deseja e inclua tudo. Eu costumo fazer isso com este comando:

rsync -vazhP path/to/source path/to/dest --exclude '*/*/' --include '*'
Mattia72
fonte
2

Por padrão, rsyncnão copia diretórios. Talvez você esteja usando a -abandeira. Se for esse o caso, observe que, de acordo com a página de manual , -aé equivalente a -rlptgoD, portanto, se você não quiser se retribuir, use -lptgoD.

Brian Moths
fonte