Eu tenho que transportar muitos arquivos de um PC para outro (ambos Linux). Eu gostaria de usar scp
para isso, mas scp
só permite transferir um arquivo de cada vez.
Como posso fazer isso?
eu tenho
- Não há possibilidade de usar rsync ou qualquer outro protocolo
- Não há possibilidade de usar certificados sem senha (mas ter um certificado com uma senha)
- Uma lista de arquivos a serem transferidos e uma lista com o caminho de destino dos arquivos no outro servidor
- Os arquivos estão espalhados por vários diretórios, e nem todos os arquivos nos diretórios que eu quero copiar
Se possível, eu gostaria de compactar e descompactar transparentemente para economizar largura de banda!
Isso é possível?
-C'' on a line by itself will cause the current directory to be changed to the directory specified on the following line. Names are terminated by newlines unless --null is specified. Note that --null also disables the special handling of lines containing
-C ''."Tenho certeza de que isso não é verdade, pelo menos não para o
scp
comando fornecido pelo OpenSSH incluído na maioria das distribuições Linux.Eu uso com
scp file1 file2 ... fileN user@host:/destination/directory/
bastante frequência.Para compactação transparente, o protocolo SSH tem isso incorporado e
scp
pode usá-lo se você fornecer a-C
opção na linha de comando. Para muitos arquivos pequenos semelhantes, você encontrará a opção tar + gz sugerida por akira obtém uma melhor compactação, pois pode fazer uso da semelhança entre esses arquivos, ondescp
comprime cada arquivo como uma entidade separada. Geralmente, prefiro usar o scp, pois é mais fácil retomar uma transferência parcial (ou, embora eu saiba que nessa situação o interlocutor não tem a opção),rsync
pois isso é ainda mais fácil de retomar e compartilhar toda a opção tar + gz vantagem de compactação.fonte
Não
scp -r yourdir otherhost:/otherdir
funciona?Tente isso então:
o
z
-flag para tar faz compressão. Ou você pode usar -C para ssh:fonte
-C
faz?No RHEL5, aqui está a única maneira possível de garantir a cópia segura de uma lista de arquivos que contêm caracteres especiais (como um espaço). Faça um script de shell e inclua o seguinte:
fonte
Isso pode ser feito sem muitos problemas.
Eu simplesmente crio uma lista de arquivos com o nome do host ao lado de cada arquivo e o scp parece analisá-lo bem. ie
Scp parece funcionar bem com essa sintaxe. Como eu tentei sem o nome do host ao lado de cada arquivo, ele falhou após o primeiro arquivo. Parece que me lembro de outra sintaxe que usei para isso antes e a publicarei assim que a localizar.
fonte
~/
pode ficar de fora - o SCP opera em relação ao diretório inicial. .. Se você tem uma lista de outro lugar$list
:scp $(echo "$list"|sed "s/^/$srchost:/") local_destination
(Isso irá quebrar nomes de arquivos com espaços)Eu recomendaria que as partes usassem um comando como este para criar um arquivo da sua lista de arquivos
tar -cvf allfiles.tar -L mylist.txt
Em seguida, use scp para baixar o arquivo.
usuário scp @ remotehost: ~ / allfiles.tar
/programming/8033857/tar-archiving-that-takes-input-from-a-list-of-files
fonte