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?


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 .

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 .

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

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ń”.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.