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)
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)
Câu trả lời:
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 ra /remote/directory/directory
.)
--ignore-existing
không thêm mà không thay thế, bạn thấy mất dữ liệu gì?
rsync
sẵn dễ dàng .... (Giống như Win32-OpenSSH)
--rsync-path
)
scp sẽ ghi đè lên các tập tin 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à).
scp -r user@server.com:/location/of/files/* /local/location/
Bạn chỉ có thể sao chép các tập tin mới theo ngày. Sử dụngfind
scp `find /data/*.gz -type f -mtime +7` USER@SERVER:/backup/
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 tin 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 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).
rsync --ignore-existing
khiến bạn mất dữ liệu?
find: missing argument to '-exec'
sử dụng lệnh này và thay vào đó phải sử dụng : find . -type f -exec chmod a-w {} \;
. Linux của tôi là xấu, ymmv.
find . -type f -exec chmod a-w {} \;
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ì lưu trữ 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ị lệch phát hiện ".
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
như một 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 . lftp
Cách sử dụng để đồng bộ hóa là dưới đây:
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
Để 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>'
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ụ:
Sao chép tất cả các tệp hiện có theo cách
mkdir original_files ; cp -r * original_files/
Sao chép mọi thứ bằng scp
scp -r user@server:dir/* ./
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/* ./
Một cách khác để đạt được điều này là thực hiện ls
trên thư mục đích:
Trên thư mục đích từ xa:
ls | awk '{print "mv " $1 " ../copied_data/"}' > mv_copied_data
scp mv_copied_data user@source.server.com:/path/to/source/folder
Về nguồn:
cd /path/to/source/folder
chmod 777 mv_copied_data
./mv_copied_data
Về đích:
scp -r user@source.server.com:/path/to/source/folder /path/to/destination/foldeer
-
>
dòng mới không gian hoặc các ký tự đặc biệt khác. 3. Mã cứng một vòng lặp for trong tập lệnh python. Tạo một chương trình trong thời gian chạy là khó khăn và khó khăn (ngay cả khi được thực hiện bởi các lập trình viên chuyên nghiệp), vì rất nhiều lý do. Tạo một kịch bản shell thậm chí còn tồi tệ hơn - một ý tưởng khủng khiếp.