Como fazer scp copiar arquivos ocultos?

63

Costumo usar o SCP para copiar arquivos - principalmente arquivos relacionados à Web. O problema é que, sempre que faço isso, não consigo meu comando para copiar arquivos ocultos (por exemplo, .htaccess).

Normalmente invoco isso:

scp -rp src/ user@server:dest/

Isso não copia arquivos ocultos. Eu não quero ter que chamar isso de novo (fazendo algo parecido scp -rp src/.* ...- e que tem estranha .e ..implicações de qualquer maneira.

Não vi nada na scppágina de manual sobre um "incluir arquivos ocultos".

Como posso fazer isso?

rascher
fonte
Eu suponho que src/.*também copie src/..(o diretório pai), certo?
Ken afiada

Respostas:

67

Isso deve corresponder absolutamente aos arquivos ocultos. O / no final da fonte diz "todos os arquivos neste diretório". No entanto, testes e pesquisas confirmam você. Este é um comportamento estúpido.

A " resposta " é acrescentar um ponto ao final da fonte:

scp -rp src/. user@server:dest/

A resposta real é usar o rsync.

Matt Simmons
fonte
Bom truque, eu ainda não tinha percebido isso.
Cstamas 07/07/09
21
rsync -avz -e ssh --progress src / user @ server: dest /
MikeyB
2
Não consigo reproduzir esse comportamento. scp -r source/ host:source2copia arquivos de ponto. Funciona no OpenSSH 5.1 a partir de 2007.
Mikel
3
Observe que adicionar um .no final não funciona mais (2019) devido a problemas de segurança. Isso é explicado aqui: superuser.com/questions/1403473/scp-error-unexpected-filename
Stéphane
25

Você pode tentar o rsync. É mais adequado para este trabalho:

rsync -av src / usuário @ servidor: dest /

(E vale a pena ler sua página de manual.)

cstamas
fonte
2
Eu sempre usar a opção --progress para rsync, eu não posso viver sem ele = D
Hofa
11
@Hofa Eu costumo usar -P porque é mais curto, já inclui --progress e também inclui --partial que pode fazer sentido se eu já estou interessado em seu progresso ;-)
cstamas
9

Não coloque uma barra após o diretório de origem. Seu código ficaria assim:

scp -rp src user@server:dest/

Isso criará um diretório 'src' em 'dest' na máquina remota, com todos os arquivos ocultos incluídos. Provavelmente não é exatamente o que você deseja, mas copiará arquivos ocultos no src.

kbyrd
fonte
3

A seguir, resolveremos o problema, isso foi totalmente testado em nosso ambiente de integração contínua

scp -rp src/. user@server:dest/
example scp -rp /usr/src/code/. [email protected]:/usr/dest/code/

Espero que ajude

stevensagaar
fonte
Após atualizar o scp recentemente, isso agora resulta em scp: error: unexpected filename: . . Certifique-se de testar se ele funciona com a sua distribuição, companheiro Googler :)
Moritz Friedrich
1

Para copiar apenas arquivos ocultos, use este comando

scp -rp /path_to_copy_hidden/.[!.]* user@host:/path_to_paste/

Jogo real é a /.[!.]*tag que se refere aos arquivos que começam com .(oculto)

Shahzaib Hayat Khan
fonte
0

Nenhuma das soluções scp acima funcionou para mim. No entanto, descobri que o seguinte funcionava no cygwin: scp -r directory / * host: directory O '*' correspondia a todos os arquivos visíveis e ignorava o invisível.

Ray Cote
fonte
0

Se o login com senha estiver desativado na máquina remota, e a única maneira de efetuar login for via chave pública, você poderá usar este:

$ rsync -av -s 'ssh -i /path/to/your/private/SSH/key' --progress [email protected]:/remote/source/directory/ /local/destination/directory/

Ele também copia arquivos ocultos.

Observe também que "user1" deve ter permissões para ler esses arquivos; por exemplo, você não pode copiar as pastas ssh de outros usuários com esse método.

Gergely Lukacsy
fonte
0

Como scpsuporta expressões regulares, isso fará o truque para você:

scp -rp src/(*|.*) user@server:dest/

donmutti
fonte
0

O controle de revisão distribuído manipula arquivos ocultos

Devido à vulnerabilidade CVE-2018-20685, o /.truque não pode mais ser usado com scp. No entanto, o controle de revisão distribuído como gitou Hg Mecurial manipulará arquivos ocultos como qualquer outro arquivo. Aqui estão os comandos para o meu Hg Mercurial favorito :

server:$ sudo apt install mercurial
client:$ sudo apt install mercurial
client:$ hg init src
client:$ cd src/
client:$ hg addr
client:$ hg com -m "first commit"
client:$ cd
client:$ hg clone src ssh://user@server/dest/

Alterações subseqüentes precisarão ser confirmadas novamente client:$ hg com -m "commit message"e pressionadas usando o client:$ hg pushcomando Aprenda mais sobre como fazer alterações nesta folha de dicas do Hg Mercurial .

Serge Stroobandt
fonte