scp -r… но пропустить (исключить) указанный подкаталог


29

Вот структура каталогов:

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

Я хочу скопировать все, КРОМЕ для подкаталога / a / c /.

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

Q: Как мне указать каталог, который нужно пропустить в команде 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.