scp -r, nhưng bỏ qua (loại trừ) một thư mục con được chỉ định


29

Đây là cấu trúc thư mục:

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

Tôi muốn sao chép mọi thứ, NGOẠI TRỪ cho thư mục con / a / c /.

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

Q: Làm thế nào tôi có thể chỉ định một thư mục để lại trong lệnh scp?


3
Động lực ban đầu là thư mục con "/ a / c /" rất lớn (gigabyte), do đó, bỏ nó ra sẽ cắt giảm bản sao từ vài phút xuống vài giây.
Russian_spy

Câu trả lời:


28

Tôi không nghĩ bạn có thể, nhưng bạn có thể sử dụng rsync? Một cái gì đó như thế này:

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

5

Tôi nghĩ rằng đây có thể là cách thực hiện chính xác vì vậy bạn vẫn đang sử dụng SSH, tôi chưa tìm thấy cách nào để làm điều đó với scp - nhưng sử dụng rsync trên ssh có thể giải quyết nó.

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

Nếu bạn sử dụng công tắc -n thì nó sẽ tạo ra một quy trình khô khan:

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

Cũng thử -rz: -e "ssh -i private.pem" -rz 'users@server:/full/path/'.
mbrownnyc

1

Bạn có thể sử dụng Globing mở rộng như trong ví dụ dưới đây:

#Enable extglob
shopt -s extglob

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

0

Không phải là cách hoàn hảo để làm điều đó, nhưng đặt thư mục con bạn muốn loại trừ thành chỉ đọc. chmod -R 444 /a/cnên làm thủ thuật. Bạn sẽ gặp lỗi "quyền bị từ chối" khi nó cố gắng ghi vào thư mục đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.