scp -r… ale pomiń (wyklucz) określony podkatalog

29

Oto struktura katalogów:

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

Chcę skopiować wszystko, Z WYJĄTKIEM dla podkatalogu / a / c /.

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

P: Jak określić katalog, który należy pominąć w poleceniu scp?

rosyjski_szpieg
źródło
3
Oryginalną motywacją jest to, że podkatalog „/ a / c /” jest bardzo duży (gigabajty), więc pozostawienie go na zewnątrz skróci kopię z minut do sekund.
russian_spy

Odpowiedzi:

28

Nie sądzę, że możesz, ale możesz użyć rsync? Coś takiego:

rsync -a --exclude=a/c myserver:/a .
Paul Dixon
źródło
5

Myślę, że może to być poprawny sposób, więc nadal używasz SSH, nie znalazłem sposobu, aby to zrobić za pomocą scp - ale użycie rsync nad ssh może to rozwiązać.

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

Jeśli użyjesz przełącznika -n, spowoduje to uruchomienie całego procesu:

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

źródło
Spróbuj również -rz: -e "ssh -i private.pem" -rz 'users@server:/full/path/'.
mbrownnyc,
1

Możesz użyć rozszerzonego globowania, jak w poniższym przykładzie:

#Enable extglob
shopt -s extglob

cp -rv !(./excludeme/*.jpg) /var/destination
WackGet
źródło
0

Nie jest to idealny sposób na zrobienie tego, ale ustaw podkatalog, który chcesz wykluczyć, jako tylko do odczytu. chmod -R 444 /a/cpowinien załatwić sprawę. Podczas próby zapisu w tym katalogu pojawi się błąd „odmowa uprawnień”.

sjobe
źródło