scp -r… mas deixe de fora (exclua) um subdiretório especificado

29

Aqui está a estrutura de diretórios:

/a/
/a/b/
/a/c/

Quero copiar tudo, EXCETO o subdiretório / a / c /.

scp -rp myserver:/a .      # this will copy everything

P: Como especificaria um diretório para deixar de fora no comando scp?

russian_spy
fonte
3
A motivação original é que o subdiretório "/ a / c /" é muito grande (gigabytes), portanto, deixar de fora reduzirá a cópia de minutos para segundos.
russian_spy

Respostas:

28

Eu não acho que você pode, mas você poderia usar o rsync? Algo assim:

rsync -a --exclude=a/c myserver:/a .
Paul Dixon
fonte
5

Eu acho que essa pode ser a maneira correta de fazê-lo, então você ainda está usando o SSH, não encontrei uma maneira de fazer isso com o scp - mas o uso do rsync sobre ssh pode resolvê-lo.

rsync -e 'ssh -ax' -av --exclude /a/c myserver:/a .

Se você usar a opção -n, ela criará uma execução a seco do processo:

 rsync -e 'ssh -ax' -av --exclude /a/c -n myserver:/a .

fonte
Tentar também -rz: -e "ssh -i private.pem" -rz 'users@server:/full/path/'.
precisa saber é o seguinte
1

Você pode usar globbing estendido como no exemplo abaixo:

#Enable extglob
shopt -s extglob

cp -rv !(./excludeme/*.jpg) /var/destination
WackGet
fonte
0

Não é a maneira perfeita de fazer isso, mas defina o subdiretório que você deseja excluir como somente leitura. chmod -R 444 /a/cdeve fazer o truque. Você receberá um erro de "permissão negada" quando tentar escrever sobre esse diretório.

sjobe
fonte