Preciso copiar todos os arquivos .class do servidor para o local com todos os dir reservados. por exemplo server:/usr/some/unknown/number/of/sub/folders/me.class
, será que /usr/project/backup/some/unknown/number/of/sub/folders/me.class
o problema é, há muitos outros arquivos inúteis, como arquivos .svn-base que eu não quero. como posso filtrá-los para que eu apenas scp
os arquivos .class?
99
Respostas:
Eu provavelmente recomendaria usar algo assim
rsync
devido a seus sinalizadoresinclude
eexclude
, por exemplo: -Algumas outras sinalizações úteis:
-r
para recursivo-a
para arquivo (principalmente todos os arquivos)-v
para saída detalhada-e
para especificar ssh em vez do padrão (que deve ser ssh, na verdade)fonte
-a
já inclui de-r
acordo com as páginas de manual do rsync.--prune-empty-dirs
removerá os diretórios vazios.Para excluir dotfiles do diretório base:
[!.]*
é um shell glob que se expande para todos os arquivos no diretório de trabalho, não começando com um ponto.fonte
Não há recurso no scp para filtrar arquivos. Para coisas "avançadas" como esta, recomendo o uso de rsync:
(esta linha copia rsync da pasta distante para a atual)
Versões recentes do túnel rsync em uma conexão ssh automaticamente por padrão.
fonte
Desde que você pode
scp
você deve estar ok parassh
,qualquer roteiro a seguir ou login e executar ...
retornar de volta (logout) ao servidor local e
scp
,Se você achar que o
$(find ...)
é muito longo para que seu alcatrão mude para,Finalmente, já que você o está mantendo
/usr/project/backup/
,por que se preocupar com a extração? Basta manter o
tar.bz2
, talvez com um carimbo de data e hora.fonte
rsync
essh
instalar no sistema operacional. Em vez disso, esta foi uma solução alternativa inteligente. Obrigado!Abaixo o comando para arquivos.
scp `find. -maxdepth 1 -name "* .log" \! -name "hs_err_pid2801.log" -type f` root @ IP: / tmp / test /
Abaixo do comando para o diretório.
scp -r `find. -maxdepth 1 -name "lo *" \! -name "localhost" -type d` root @ IP: / tmp / test /
você pode personalizar o comando acima de acordo com sua necessidade.
fonte
Com a autenticação baseada em chave ssh ativada, o seguinte script funcionaria.
fonte
Se você realmente quiser usar scp, há uma maneira indireta. Diga que queremos copiar todos os arquivos .jpg da pasta local '/ src' para a pasta '/ dst' no servidor remoto 10.1.1.2:
fonte
fonte
Copie sua pasta de origem para
somedir
:cp -r
srcdir
somedir
Remova todos os arquivos desnecessários:
encontre algumedir -nome '.svn' -exec rm -rf {} \ +
lançar scp de
somedir
fonte
tar
ouzip
. Em vez disso, não há compressão (scp faz a compressão) e o código 'empacotado' é copiado.