it-swarm-vi.tech

Cách sử dụng rsync qua FTP

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).

191
bumperbox

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ó.

80
serverhorror

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, lftpncftp 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"
163
easel

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.

123
GabrieleV

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 Fusecurlftpfs (prolly Debian đã có Fuse cài đặt theo mặc định), sau đó:

  1. Sudo apt-get install curlftpfs

  2. Đảm bảo mô đun Fuse được tải (modprobe Fuse)

  3. 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:

  • Rằng nhà phát triển đã bỏ dự án một hoặc hai năm trước, vì vậy tôi không biết làm thế nào có thể sử dụng/ổn định trong thời điểm hiện tại.
  • Nếu mật khẩu chứa ký tự lạ curlftpfs có thể không thành công (có thể bạn có thể làm gì đó với .netrc).
25

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.

16
Johan

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".

9
Ian Kelling

Điều này có vẻ phù hợp và miễn phí: https://savannah.gnu.org/projects/ftpsync/

8
pauska

Đố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.

wget -m ftp: // tên người dùng: [email protected]

7
Aaron

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

5
shaftmx

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.

4
Papou

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&section=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.

3
user25738

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

2
desdecode

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 đó.

2
Sam Cogan

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 
1
bernie

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ả.

1
Kan-Ru Chen

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'
0
superdario128

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] .

0
Ole Wolf