scp -r…, але залишити (виключити) вказаний підкаталог


29

Ось структура каталогу:

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

Я хочу скопіювати все, Окрім підкаталогу / a / c /.

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

Питання: Як я можу вказати каталог, який потрібно залишити в команді scp?


3
Оригінальна мотивація полягає в тому, що підкаталог "/ a / c /" дуже великий (гігабайти), тому, якщо його вимкнути, це скоротить копію з декількох хвилин на секунди.
russian_spy

Відповіді:


28

Я не думаю, що ти можеш, але ти можеш використовувати rsync? Щось на зразок цього:

rsync -a --exclude=a/c myserver:/a .

5

Я думаю, що це може бути правильний спосіб зробити це, тому ви все ще використовуєте SSH, я не знайшов способу зробити це з scp - але використання rsync через ssh може вирішити це.

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

Якщо ви використовуєте перемикач -n, то це створить сухий хід процесу:

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

Також спробуйте -rz: -e "ssh -i private.pem" -rz 'users@server:/full/path/'.
mbrownnyc

1

Ви можете використовувати розширений глобус, як у наведеному нижче прикладі:

#Enable extglob
shopt -s extglob

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

0

Це не ідеальний спосіб зробити це, але встановіть підкаталог, який ви хочете виключити, як лише для читання. chmod -R 444 /a/cповинен зробити трюк. Під час спроби запису над цим каталогом ви отримаєте помилку "відмовлено у дозволі".

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.