it-swarm-vi.com

scp mà không thay thế các tập tin hiện có ở đích

Làm cách nào để sao chép toàn bộ thư mục vào thư mục cùng tên mà không thay thế nội dung trong thư mục đích? (thay vào đó, tôi muốn thêm vào nội dung của thư mục đích)

169
biznez

Sử dụng rsync và vượt qua -u nếu bạn muốn chỉ cập nhật các tệp mới hơn trong thư mục gốc hoặc --ignore-existing để bỏ qua tất cả các tệp đã tồn tại ở đích.

rsync -au /local/directory/ Host:/remote/directory/
rsync -a --ignore-existing /local/directory/ Host:/remote/directory/

(Lưu ý / về phía nguồn: không có nó rsync sẽ tạo /remote/directory/directory.)

scp sẽ ghi đè lên các tệp nếu bạn có quyền ghi vào chúng.

Nói cách khác: Bạn có thể thực hiện scp bỏ qua các tệp đã nói một cách hiệu quả bằng cách tạm thời xóa quyền ghi trên chúng (nếu bạn là chủ sở hữu của tệp, nghĩa là).

88
Reimund

Bạn chỉ có thể sao chép các tập tin mới theo ngày. Sử dụng find

scp  `find /data/*.gz -type f -mtime +7` [email protected]:/backup/
12
Naks

Nếu bạn có thể làm cho nội dung tệp đích chỉ đọc:

find . -type f -exec chmod a-w '{}' \;

trước khi chạy scp (nó sẽ khiếu nại và bỏ qua các tệp hiện có).

Và thay đổi chúng trở lại sau đó (chmod +w để có được giá trị dựa trên umask). Nếu tất cả các tệp không có quyền ghi theo ô của bạn, bằng cách nào đó bạn sẽ phải lưu trữ các quyền để bạn có thể khôi phục chúng.

(Câu trả lời của Gilles sẽ ghi đè lên các tệp hiện có nếu cục bộ chúng mới hơn, tôi đã mất dữ liệu có giá trị theo cách đó. Không hiểu tại sao câu trả lời sai và có hại đó lại có quá nhiều phiếu bầu).

10
Mohad

Để sao chép toàn bộ tập tin, nhanh hơn để tar chúng. Bằng cách sử dụng -k, bạn cũng ngăn tar ghi đè các tệp khi giải nén nó trên hệ thống đích.

tar -c <source-dir> | ssh <name>@<Host> 'tar -kxzf - -C <target-dir>' 
7
huembi

Tôi đã có một nhiệm vụ tương tự, trong trường hợp của tôi, tôi không thể sử dụng rsync, csync hoặc Fuse vì bộ nhớ của tôi chỉ có SFTP. rsync không thể thay đổi ngày và giờ cho tệp, một số tiện ích khác (như csync) đã hiển thị cho tôi các lỗi khác: " Không thể tạo tệp tạm thời Đồng hồ bị phát hiện lệch ".

Nếu bạn có quyền truy cập vào máy chủ lưu trữ - chỉ cần cài đặt openssh-server Hoặc khởi chạy rsync dưới dạng trình nền tại đây.

Trong trường hợp của tôi - tôi không thể làm điều này và giải pháp là: lftp . Cách sử dụng để đồng bộ hóa lftp bên dưới:

lftp -c "open -u login,password sftp://sft.domain.tld/; \
    mirror -c --verbose=9 -e -R -L /srs/folder /rem/folder"

/src/folder - là thư mục trên PC của tôi, /rem/folder - là sftp://sft.domain.tld/rem/folder.

Bạn có thể tìm thấy các trang man theo liên kết: http://lftp.yar.ru/lftp-man.html

6
bolD

scp không ghi đè lên các tệp và không có công tắc nào để ngăn chặn việc đó, nhưng bạn có thể sao chép mọi thứ theo cách đó, thực hiện scp và sau đó sao chép các tệp hiện có. Ví dụ:

  1. Sao chép tất cả các tệp hiện có theo cách

    mkdir original_files ; cp -r * original_files/
    
  2. Sao chép mọi thứ bằng scp

    scp -r [email protected]:dir/* ./
    
  3. Sao chép các tập tin gốc trên bất cứ điều gì scp đã viết qua:

    cp -r original_files/* ./
    
0
A.Badger