rsync apenas nomes de arquivos

3

É possível, somente rsync os nomes dos arquivos? Eu tenho uma caixa de armazenamento e quero os nomes de arquivos (e seus caminhos) adicionados a outra caixa. Atualmente, estou criando cada arquivo com touch (eles serão criados com um tamanho de 0 byte). Demora muito e queria saber se isso poderia ser automatizado com rsync .

Se não, existe alguma outra ferramenta que permita isso? Ou eu precisaria codificar algo personalizado?

    
por Devator 12.11.2012 / 16:45

2 respostas

4

Se o seu objetivo é criar arquivos empy, então um modelo pode ser criado da seguinte forma:

#!/bin/bash
FILES=$1 # original structure
TMPL=$2  # where to create empty files
[[ -d $FILES ]] || exit 1
[[ -d $TMPL ]] || mkdir -p $TMPL || exit 1

cd $TMPL
find "$FILES" -type d -printf "$TMPL%p
rsync -av -e 'ssh -p 22 -l username' \
    /template/structure remotehost:/backup/templates/
" | sort -z |xargs -0 -L 1000 mkdir -p find "$FILES" -type f -printf "$TMPL%p
#!/bin/bash
FILES=$1 # original structure
TMPL=$2  # where to create empty files
[[ -d $FILES ]] || exit 1
[[ -d $TMPL ]] || mkdir -p $TMPL || exit 1

cd $TMPL
find "$FILES" -type d -printf "$TMPL%p
rsync -av -e 'ssh -p 22 -l username' \
    /template/structure remotehost:/backup/templates/
" | sort -z |xargs -0 -L 1000 mkdir -p find "$FILES" -type f -printf "$TMPL%p%pre%" | xargs -0 -L 1000 touch
" | xargs -0 -L 1000 touch

Isso cria o diretório de todos os arquivos da árvore original e toca os arquivos nas pastas criadas sob o TMPL.

Depois de criar uma pasta "espelhada" com apenas arquivos vazios, ela pode ser sincronizada com qualquer host como qualquer outra pasta:

%pre%

A opção -e é opcional se o nome de usuário for o mesmo em ambos os hosts e se o sshd for executado na porta padrão. Preste atenção ao que acontece quando você especifica uma barra final em ambas ou em uma das partes de e para. Isso é significativo. O parâmetro remotehost, pode ser um endereço IP em vez de um alias.

    
por 15.11.2012 / 00:27
0

O rsync em si parece não ter uma opção para criar apenas arquivos. No entanto, você pode tentar várias maneiras, em vez de usar o toque manualmente:

  • rsync a árvore de diretórios, em seguida, execute find na raiz dessa árvore e echo "" > em cada arquivo
  • use find para obter uma lista de árvores de diretórios e use mkdir -p em cada elemento dessa lista (possivelmente fazendo a classificação inversa antes para minimizar o número de syscalls) e use touch em uma lista criada de forma semelhante de arquivos.

No entanto, eu usaria a primeira opção se o espaço estivesse disponível, pois ele preserva permissões e direitos de acesso (dados argumentos apropriados para rsync ).

    
por 12.11.2012 / 17:06