scp recursivo sem seguir links ou criar um arquivo tar gigante?

3

Então eu fiz um scp recursivo no meu servidor de arquivos remoto (em outro estado) e ele criou um loop infinito de links no meu diretório web remoto ...

link diz que eu posso tente criar um arquivo tar gigante. Há um problema com isso - estou executando o scp recursivo em uma máquina Linux no meu escritório, e estou copiando os arquivos para o meu disco rígido externo, que está no formato FAT32 (porque preciso de algo legível por UNIX e Windows). O FAT32 não suporta arquivos grandes. Então eu teria que tentar algo diferente.

Existe também uma opção de rsync, mas a máquina Linux no meu escritório é muito primitiva (é igel), por isso não tem rsync ...

    
por InquilineKea 09.12.2012 / 23:06

2 respostas

4

Eu não recomendaria usar scp para transferir árvores de arquivos grandes diretamente, porque não manipula corretamente links rígidos nem soft, também o fluxo não é compactado.

Eu recomendaria cpio com (de) compactação em tempo real:

ssh user@host "cd /path/to/files && find . | cpio -ov | bzip2 -c" | bunzip2 -c | cpio -ivd

Além disso, find pode lidar com condições adicionais, como "os arquivos devem ter menos de 4 G"

find . -size -4G | ...

Para tornar cpio mais amigável ao espaço (para manipular espaços em nomes de arquivos corretamente) use

find . -print0 | cpio -0 -ivd | ...
    
por 10.12.2012 / 12:39
2

Você não precisa criar o arquivo tar antes de enviá-lo. Você pode fazer isso na hora:

cd /source/dir
tar -cf - . | ssh 'cd /destination/directory && tar -xf -'

Isso requer que o servidor remoto aceite conexões de shell ssh, não apenas conexões scp. Em teoria, é possível enviar árvores de arquivos arbitrárias para o lado remoto que não correspondem a nada como a estrutura de arquivos local, mas eu não sei de nenhuma ferramenta existente para fazer isso.

Se os links simbólicos são um problema, você pode fazer uma cópia de uma árvore de diretórios que não inclua links simbólicos e que use um espaço insignificante, supondo que a árvore de origem esteja em um sistema de arquivos que suporte hard links sistema de arquivos, ou NTFS, mas não FAT). Estou assumindo utilitários GNU aqui:

cd /source/dir
mkdir ../regular-files-only
cp -al . ../regular-files-only
find ../regular-file-only \! -type f \! -type d -delete

Você também pode usar o sftp. sftp -r não segue links simbólicos, ao contrário de scp -r .

    
por 10.12.2012 / 00:29

Tags