Como eu copio todos os arquivos e diretórios, exceto alguns em ssh?

22

Usando a linha de comando do Linux, eu uso o comando scp , para copiar todos os arquivos e pastas de um determinado diretório. No entanto, não gosto de consumir largura de banda, por copiar coisas que raramente mudo como a minha pasta tiny_mce . Qual é o truque para copiar tudo, mas pular uma pequena lista de pastas?

    
por Michael Prokopec 16.11.2008 / 00:43

9 respostas

19

rsync funciona bem e, na maioria dos casos, usa o SSH automaticamente, como é o protocolo de transporte. Ele comparará os arquivos e somente fará o upload dos que foram alterados, mas você também pode usar uma lista de exclusão para especificar arquivos na árvore que não devem ser rsynced de qualquer forma.

    
por 16.11.2008 / 02:04
12

Você pode tentar rsync , que apenas copia arquivos que foram alterados, também funciona em ssh.

    
por 16.11.2008 / 00:49
9

Usar rsync --exclude é a escolha mais óbvia aqui, mas se você realmente quiser apenas enviar alguns arquivos ou pastas e tiver algo específico para excluir, poderá usar o shell globing com scp . Primeiro, certifique-se de ter as opções de globagem corretas definidas no seu shell. Para bash run shopt -s extglob e para zsh use setopt ksh_glob . Então algo assim:

scp /path/to/folder/!(tiny_mce|other_folder|*.bak) user@host:target_path

... copiaria tudo na pasta de origem, exceto as que correspondem ao padrão fornecido. Obviamente, você pode ser criativo com essa parte.

    
por 10.06.2011 / 10:51
7

rsync é uma boa solução, mas se você está procurando uma alternativa:

Digamos que temos um diretório "test" contendo os diretórios "foo, bar, baz". Nestes dirs existem vários tipos de arquivos diferentes:

test
|____bar
| |____1.jpg
| |____1.png
| |____1.txt
| |____2.jpg
| |____2.png
| |____2.txt
|____baz
| |____1.avi
| |____2.avi
| |____3.png
|____foo
| |____test.blah
|____test.txt

Queremos copiar tudo, exceto os PNGs

scp $(find /location/of/test -type f ! -name "*.png") # -> Note the logical NOT!!

Neste exemplo, o comando colocará todos os arquivos no mesmo diretório de destino - isso pode não ser o comportamento desejado.

    
por 18.11.2008 / 17:00
3

Uma ótima ferramenta que você pode querer experimentar é "lftp".

lftp sftp://etc.etc/ 
lftp> ls 
    --- remote listing ---
lftp> mirror -R -n local/ remote/

Você também pode usar o RSync sobre o ssh

rsync -avzp -e ssh /this/dir/  remoteuser@remotehost:/remote/dir/

Deve funcionar.

    
por 16.11.2008 / 00:45
0

Acabei de terminar escrevendo como preferir uníssono ao rsync em qualquer dia, desde isso

  • não precisa de um daemon, além de ssh para transporte
  • permite modificar arquivos de qualquer lado a qualquer momento - vários mestres com facilidade, enquanto eu só preciso enviar uma solicitação de sincronização de um lado
  • Eu sou um defensor quando se trata de modtimes, atributos / permissões, softlinks etc. Nenhum problema com isso; para um projeto eu até uso 4 espelhos, sendo um deles um host cygwin. Veja meu exemplo de configuração do crontab.
  • suporta exclusões como *.bak . Amostras no meu arquivo de configuração
por 03.02.2012 / 00:01
0

Uso da cópia protegida - scp

scp -r file user@host:

Para copiar muitos arquivos

scp /directory/* user@host:destinationPath

Para copiar alguns arquivos

scp /directory/!(*.doc) user@host:destinationPath

Copia o conteúdo do diretório, exceto arquivos .doc

    
por 08.12.2015 / 10:34
0

Eu certamente recomendaria o seu rsync.

rsync -vra --exclude="o que você deseja excluir" -e ssh pasta user @ remotehost: / folder

    
por 08.12.2015 / 11:44
0

Isto é o que funcionou para mim quando o executei a partir do servidor de destino.

rsync -av --progress user@servername:/sourcefolder /destinationfolder --exclude thefoldertoexclude
    
por 17.08.2017 / 20:42