Bất kỳ unix:
Tôi có dòng cmd sau đây hoạt động tốt.
rsync -avr -e ssh /home/dir [email protected]:/home/
Nhưng tôi cần thiết lập nó ngay bây giờ để rsync đến một máy chủ từ xa chỉ có máy chủ FTP trên đó. Làm thế nào để tôi đi về điều đó?
Tôi đã xem trợ giúp rsync nhưng nhanh chóng bị lạc (tôi không thường xuyên làm việc này).
Bạn không. rsync không thể làm điều đó cho bạn, nó là một giao thức của riêng nó và không hoạt động trên FTP.
Tuy nhiên, bạn có thể muốn thử csync . IIRC nó cung cấp hành vi giống như rsync trên HTTP. Tôi không thể nhận xét về việc nó có hoạt động trên FTP hay không, bạn sẽ phải thử nó.
rsync sẽ không hiệu quả với bạn vì những lý do mà người khác đã đề cập. Tuy nhiên, lftp và ncftp cả hai đều có chế độ "gương" có thể sẽ đáp ứng nhu cầu của bạn.
Tôi sử dụng điều này để đẩy nội dung từ thư mục cục bộ của mình lên máy chủ web ftp hoặc sftp:
lftp -c "set ftp:list-options -a;
open ftp://user:[email protected];
lcd ./web;
cd /web/public_html;
mirror --reverse --delete --use-cache --verbose --allow-chown
--allow-suid --no-umask --parallel=2 --exclude-glob .svn"
Như được viết bởi giá vẽ , lftp
là một công cụ tốt.
Tôi đề nghị bạn nên tham số hóa tập lệnh và sử dụng
exclude-glob
tùy chọn, loại trừ tên tệp bằng tính năng toàn cầu (*,? ..) của Shell của bạn:
#!/bin/bash
Host="your.ftp.Host.dom"
USER="username"
PASS="password"
FTPURL="ftp://$USER:[email protected]$Host"
LCD="/path/of/your/local/dir"
RCD="/path/of/your/remote/dir"
#DELETE="--delete"
lftp -c "set ftp:list-options -a;
open '$FTPURL';
lcd $LCD;
cd $RCD;
mirror --reverse \
$DELETE \
--verbose \
--exclude-glob a-dir-to-exclude/ \
--exclude-glob a-file-to-exclude \
--exclude-glob a-file-group-to-exclude* \
--exclude-glob other-files-to-exclude"
Cảnh báo: đảm bảo rằng thư mục đích tồn tại, nếu không lệnh cd sẽ thất bại, vì vậy thao tác bao gồm xóa cây của các tệp sẽ diễn ra tại thư mục sai (root)!
Tôi đã cập nhật tập lệnh để tùy chọn --delete
Bị vô hiệu hóa bởi defaut, kích hoạt nó bằng cách bỏ ghi chú DELETE= command
.
Tùy thuộc vào những gì bạn thực sự đang cố gắng thực hiện, một cách tiếp cận hoàn toàn khác có thể được sử dụng curlftps
để gắn thư mục ftp, và sau đó có thể rsync
hai thư mục "cục bộ".
Cài đặt khác nhau tùy thuộc vào bản phân phối của bạn, vì vậy tôi không thể khái quát về điều đó, nhưng bạn cần cài đặt Fuse
và curlftpfs
(prolly Debian đã có Fuse
cài đặt theo mặc định), sau đó:
Sudo apt-get install curlftpfs
Đảm bảo mô đun Fuse
được tải (modprobe Fuse
)
Sudo curlftpfs ftp.yourserver.com /path/to/ftp/folder/ -o user=username:password,allow_other
Lưu ý rằng không có khoảng trắng sau dấu phẩy cuối cùng (đó không phải là lỗi chính tả!). Nếu bạn hài lòng với điều đó hoặc không muốn thực hiện điều đó mỗi lần, bạn có thể thêm nó vào fstab của mình (thường là trong /etc/fstab
):
curlftpfs#user:[email protected] /path/to/ftp/folder/ Fuse auto,user,uid=1000,allow_other 0 0
Trong trường hợp đó, bạn phải đảm bảo mô-đun Fuse được tải trước đó.
Mặc dù vậy, hãy lưu ý hai điều sau:
curlftpfs
có thể không thành công (có thể bạn có thể làm gì đó với .netrc
).Có tinyx ...
Weex là một tiện ích được thiết kế để tự động hóa nhiệm vụ duy trì từ xa một trang web hoặc kho lưu trữ FTP khác. Nó sẽ đồng bộ hóa một tập hợp các tệp cục bộ đến một máy chủ từ xa bằng cách thực hiện tải lên và xóa từ xa theo yêu cầu.
rsync không hoạt động trên ftp. Ở phía xa, nó cần daemon rsync hoặc Shell mà nó có thể gọi rsync từ đó. Ftp thường cho phép bạn gọi một vài lệnh và rsync không phải là một trong số chúng. Có các công cụ khác có nghĩa là để tự động hóa các tác vụ ftp như "lftp".
Điều này có vẻ phù hợp và miễn phí: https://savannah.gnu.org/projects/ftpsync/
Đối với những gì nó xuất hiện bạn đang cố gắng làm, bạn cũng có thể sử dụng wget.
Bạn có thể sử dụng curlftpfs để gắn kết ftp và sử dụng rsync sau http://linux.die.net/man/1/curlftpfs
Tôi đang sử dụng GVFS/FTP. Tôi gắn máy chủ FTP từ xa của tôi với gigolo. Vì chúng được xem như các thư mục cục bộ, hầu hết mọi thứ hoạt động trên các tệp cục bộ đều hoạt động. rsync được thiết kế để tính toán băm tệp từ xa để so sánh các tệp mà không chuyển chúng, nhưng thực hiện điều đó với các tệp ảo sẽ chuyển các tệp bằng mọi cách. unison và freefilesync thường hoạt động tốt nhưng tôi gặp một vấn đề khi họ muốn đổi tên một tệp bạn đã tải lên, không có vấn đề gì khi tải xuống. Đây có thể là một vấn đề với gvfs 1.6.1.
Giải pháp của Jonas S có thể hữu ích tùy thuộc vào hoàn cảnh, ví dụ nếu bạn có tốc độ tải xuống cao và tải lên chậm, việc kiểm tra các tệp trên máy chủ có thể tương đối nhanh hơn tải lên các tệp không cần thiết.
Bạn có thể muốn sử dụng CurlFTPFS, mặc dù: http://packages.ubfox.com/search?suite=default§ion=all&Arch=any&searchon=names&keywords=curlftpfs
Mặc dù, nhìn chung, tốt hơn hết là sử dụng máy khách FTP thông thường thay vì rsync.
Nếu bạn muốn tự động hóa tác vụ thì hãy sử dụng lftp vì bạn có thể tạo tập lệnh như một số người đã đăng ở trên, bạn có thể tạo tập lệnh thực sự dễ dàng theo ý thích của mình, nếu bạn đang tìm giải pháp một lần (nghĩa là bạn cần tải xuống toàn bộ trang web thông qua ftp/di chuyển nó đến một máy chủ khác) sử dụng ncftp, đơn giản, cài đặt nó nếu nó chưa được cài đặt:
apt-get install ncftp
hoặc là
yum install ncftp
(xin lỗi các bản phân phối không dựa trên Redian/Red Hat ..)
sau khi cài đặt, mở ncftp trong terminal rồi gõ:
open -u ftpusername ftp.thedomain.com
Nó sẽ hỏi bạn mật khẩu, nhập mật khẩu và sau đó:
get -R /home/remotewebsite/public_html/ /home/localwebsite/public_html/
Nó sẽ làm phần còn lại trong công việc cho bạn .. chúc may mắn
Tôi không tin rằng bạn sẽ có thể làm điều này, máy chủ mà bạn đang cố gắng để Syncync sẽ chỉ có một máy chủ FTP đang chạy, nó sẽ không hiểu các lệnh mà Rupync đang gửi nó.
Nếu lý do bạn muốn làm điều này là vì bạn chỉ có quyền truy cập vào cổng 21, nhưng bạn có quyền kiểm soát máy chủ, bạn có thể thay đổi cổng mà Rsync lắng nghe trên máy chủ, nhưng điều này rõ ràng chỉ hữu ích nếu bạn không muốn sử dụng FTP trên cổng đó.
rclone là một phần mềm đẹp, đồng bộ hóa thư mục qua ftp và nhiều giao thức khác bao gồm các nhà cung cấp lưu trữ đám mây (Amazon S3, Dropbox, Google Drive). Nó có thể đồng bộ hóa đến/từ bất kỳ sự kết hợp nào của bộ nhớ cục bộ hoặc từ xa.
Để thiết lập một ftp
làm theo từ xa các hướng dẫn này .
Khi đã xong, thao tác đồng bộ là:
rclone sync /home/dir FTP_REMOTE:/home --progress
Sử dụng trang web sitecopy, hay gương Mirror, có thể giúp bạn tiết kiệm rất nhiều băng thông.
Cả hai đều xử lý cập nhật gia tăng hiệu quả.
Tôi đã tạo công cụ dòng lệnh riêng cho việc đó: ftpsync
Tại sao? Vì đơn giản và thanh lịch, các công cụ khác đòi hỏi nhiều sự phụ thuộc, đôi khi biên dịch, đôi khi không hoạt động (ví dụ: lftp trên MacOs High Sierra). Ftpsync được viết bằng Python thuần túy, không yêu cầu lib của bên thứ 3 và nó nhỏ, bạn chỉ có thể đưa tệp vào dự án của mình.
Sử dụng: cd vào thư mục dự án của bạn và gõ:
ftpsync user:[email protected]/remote/dir --delete
--delete
là viết tắt của việc xóa các tệp từ xa không tồn tại cục bộ.
Nếu bạn không muốn đồng bộ hóa mà chỉ chạy lệnh ftp thô, hãy sử dụng:
ftpsync -c '...'
Nó hữu ích cho một số thao tác đơn giản như gửi tệp và đổi tên nó:
ftpsync -c 'PASV; TYPE I; STOR some_file.ext; RNFR some_file.ext; RNTO some_file_renamed.ext'
Ngoài ra còn có tranh luận:
wput --timestamping --reupload --dont-continue source-files ftp://target.Host/dir
Tên người dùng và mật khẩu được đọc từ ~/.netrc. Mặt khác, nếu bạn không đặc biệt quan tâm đến bảo mật, bạn có thể cung cấp chúng dưới dạng ftp: // tên người dùng: [email protected] .