scp apenas determinados arquivos

4

Eu estou tentando copiar arquivos alterados para godaddy via ssh. Godaddy é terrível e por isso eles não permitem rsync. Eu posso usar scp, mas eu realmente só quero copiar arquivos alterados. Eu não acho que isso é possível, então eu queria saber se eu poderia scp apenas todos os arquivos php.

Existem muitos sub-diretórios, então eu preciso usar a opção -r.

Existe uma maneira que eu possa usar scp para copiar todos os arquivos com extensão phprecursivamente? como isso:

scp -r -name "*php" /local/html/ user@server:/home/html/ (não funciona)

RESULTADO DESEJADO

//on local machine
 $ find ./source  fonte / 1.php
fonte / 2.php
fonte / sub
fonte / sub / 3.php
fonte / sub / 4.php
fonte / sub / DONT-copy.txt
fonte / sub / DONT-copy.png
fonte / sub / sub2
fonte / sub / sub2 / 5.php
fonte / sub / sub2 / 6.php

// comando para copiar os arquivos  $ [comando scp aqui]  // no servidor remoto  $ find ./destination  destino / 1.php
destino / 2.php
destino / sub
destino / sub / 3.php
destino / sub / 4.php
destino / sub / sub2
destino / sub / sub2 / 5.php
destino / sub / sub2 / 6.php 

ISSO NÃO FUNCIONA

//on local machine
 $ find ./source  fonte / 1.php
fonte / 2.php
fonte / sub
fonte / sub / 3.php
fonte / sub / 4.php
fonte / sub / DONT-copy.txt
fonte / sub / DONT-copy.png
fonte / sub / sub2
fonte / sub / sub2 / 5.php
fonte / sub / sub2 / 6.php

// comando para copiar os arquivos  $ cd source; scp -r * .php usuario @ remoto: / destino  // no servidor remoto  $ find ./destination  destino / 1.php
destino / 2.php 

Talvez pudéssemos tentar usar find também, mas eu tenho certeza que isso não vai funcionar como está :

find ./source -name "*.php" -exec scp {} user@remote:{} \;

Isso não vai funcionar porque eu não acho que você pode usar vários {} operadores em encontrar.

Além disso, pode ser difícil obter os caminhos para alinhar no servidor remoto, por exemplo, se a localização estava retornando /users/johndoe/documents/source/1.php e você queria acabar em /home/jane/www/destination/1.php no servidor remoto.

cwd
fonte
2
É possível que você execute um comando (via ssh) no servidor remoto? Se assim for, você pode tar os arquivos localmente e fazer um cat phpfiles.tar | ssh user@remote "cd destination && tar cf -" para transferir todos os seus arquivos de uma só vez.
mpy
Você realmente tentou seu último comando de localização com múltiplos {} fichas? Parece promissor (você posso usar múltiplos {} ), talvez você precise especificar user@remote:~/{} como destino.
mpy
Oups, esta pergunta foi há quase dois anos atrás ... Eu estou querendo saber por que ele mostrou no topo das questões agora ...
mpy

Respostas:

2

aqui está o que eu faço quando um host só permite empurrar coisas, e não rsync:

  • crie um diretório "shadow" em sua máquina local para se assemelhar estrutura alvo
  • usar rsync para empurrar para este diretório de sombra, e capturar a saída (há --log-file se você quiser fazer um script)
  • de rsync saída, determine os arquivos que você precisa excluir ou empurre e faça uma lista
  • talvez (depende da maneira como você pressiona): crie um pacote a partir dos arquivos que precisam ser alterados apenas
  • comece sua ferramenta push - ftp, scp, o que for - e deixe rodar nos arquivos da lista
Florenz Kley
fonte
0

Você não pode fazer scp -r *.php destination ?

hari
fonte
mas isso copiará todos os arquivos * .php em subdiretórios também?
cwd
@cwd: Qual é a sua exigência exata?
hari
atualizou a questão
cwd
Ainda não tenho certeza do que você está perguntando aqui. de quais arquivos você deseja copiar /local/html? todos os arquivos * .php? só mudou *.php arquivos? o que faz argumento -name significar?
hari
-name é o parâmetro que o rsync usa para filtrar apenas arquivos php. Eu gostaria de copiar apenas arquivos alterados (como o rsync), mas como o rsync não está disponível, eu gostaria apenas de copiar apenas arquivos php (para economizar largura de banda). Isso faz sentido? Eu acho que eu poderia fazer um find -exec scp comando, mas eu precisaria pegar o basepath e certifique-se de que é adicionado ao argumento de destino também. Parece que deveria haver uma maneira fácil de fazer isso.
cwd
-1

scp -r user @ ip: / dados / arquivos / *. php / tmp / files /

KBastos
fonte