Tenho cerca de 50 arquivos em vários subdiretórios que gostaria de enviar para um servidor remoto. Achei que o rsync seria capaz de fazer isso por mim usando a opção --include-from. Sem a opção --exclude = "*", todos os arquivos no diretório estão sendo sincronizados, com a opção, nenhum arquivo está.
rsync -avP -e ssh --include-from=deploy/rsync_include.txt --exclude=* ./ [email protected]:/var/www/ --dry-run
Estou executando-o como seco inicialmente e 0.0.0.0 foi obviamente substituído pelo IP do servidor remoto. O conteúdo de rsync_include.txt é uma nova lista separada por linha de caminhos relativos para os arquivos que desejo enviar.
Existe uma maneira melhor de fazer isso que está me escapando na segunda-feira de manhã?
rsync --files-from
é provavelmente uma solução mais fácil e confiável :)Existe uma bandeira
--files-from
que faz exatamente o que você deseja. Deman rsync
:fonte
rsync -av --files-from=file-list . target/
para copiar os arquivos do diretório atual.The filenames that are read from the FILE are all relative to the source dir
...
rsync, parece ignorar o..
erro que me dá comorsync: link_stat "/home/michael/test/subdir/test.txt" failed: No such file or directory
(neste caso, executando a partir do diretório "test" e tentando especificar "../subdir/test.txt" que existe.--files-from
argumento pode ser combinado com uma lista explícita de inclusões e exclusões, e os arquivos da lista adicionados--files-from
substituirão as regras de exclusão existentes, de modo que sejam incluídos se aparecerem no arquivo?--files-from=
O parâmetro precisa de uma barra final se você quiser manter o caminho absoluto intacto. Portanto, seu comando seria algo como abaixo:Isso pode ser feito como se houvesse um grande número de arquivos e você deseja copiar todos os arquivos para o caminho x. Assim, você encontraria os arquivos e geraria a saída para um arquivo como abaixo:
fonte
Para que fique registrado, nenhuma das respostas acima ajudou, exceto uma. Para resumir, você pode fazer a operação de backup
--files-from=
usando:OU
O primeiro comando é autoexplicativo, ao lado do conteúdo do arquivo
rsync-src-files
que elaborarei a seguir. Agora, se você quiser usar a última versão, você precisa ter em mente as seguintes quatro observações:--files-from
e o diretório de origem--recursive
.rsync-src-files
é um arquivo criado pelo usuário e foi colocado no diretório src para este testersyn-src-files
contêm os arquivos e pastas a serem copiados e são levados em relação ao diretório de origem. IMPORTANTE: Certifique-se de que não haja espaços à direita ou linhas em branco no arquivo. No exemplo abaixo, existem apenas duas linhas, não três (descubra por acaso). Conteúdo dersynch-src-files
é:folderName1
folderName2
fonte
Recebi uma tarefa semelhante: fazer rsync para todos os arquivos modificados após determinada data, mas excluindo alguns diretórios. Era difícil construir um estilo all-in-one de revestimento, então mergulhei o problema em pedaços menores. Solução final:
Primeiro eu uso
find -L ~/sourceDIR -type f -newermt "DD MMM YYYY HH:MM:SS"
. Tentei adicionarregex
àfind
linha para excluir padrões de nome, porém meu sabor de Linux (Mint) parece não entender negar regex emfind
. Número experimentado de sabores de regex - não funciona como desejado. Então eu acabo comegrep -v
- opção que exclui o padrão de maneira fácil. Meursync
não está copiando diretórios como /.cache ou /.config além de alguns outros que nomeei explicitamente.fonte
bash
única:rsync -v --files-from=<(find ~/sourceDIR -type f -newermt "DD MMM YYYY HH:MM:SS" | grep -Ev "/\..|Downloads|FOO") ~/sourceDIR /Destination
Sintaxe:
rsync <file_/_folder_list> <source> <target>
Os nomes das pastas (aqui, COM um final
/
; por exemploCancer - Evolution/
) estão em um arquivo de lista de pastas (por exemplo: cm_folder_list_test):Se você não incluir aqueles à direita
/
, as pastas de destino rsync serão criadas, mas estarão vazias.Esses nomes de pasta são anexados ao resto de seu caminho (
/home/victoria/Mail/2_RESEARCH - NEWS
), fornecendo assim o caminho de pasta completo para rsync; por exemplo:/home/victoria/Mail/2_RESEARCH - NEWS/Cancer - Evolution/
.Observe que você também precisa usar
--files-from=
..., NÃO--include-from=
...rsync -aqP --delete --files-from=/mnt/Vancouver/projects/ie/claws/data/cm_folder_list_test "/home/victoria/Mail/2_RESEARCH - NEWS" $IN/
(No meu script BASH, defini a variável da
$IN
seguinte forma.)Opções de rsync usadas:
fonte
Esta resposta não é a resposta direta para a pergunta. Mas deve ajudá-lo a descobrir qual solução se encaixa melhor para o seu problema.
Ao analisar o problema você deve ativar a opção de depuração
-vv
Em seguida, o rsync irá mostrar quais arquivos são incluídos ou excluídos por qual padrão:
fonte
Nenhuma dessas respostas funcionou para mim, quando tudo que eu tinha era uma lista de diretórios . Então eu tropecei na solução! Você tem que adicionar
-r
a--files-from
causa-a
não será recursiva neste cenário (que sabia ?!).fonte