Làm cách nào để tải một thư mục đệ quy lên máy chủ FTP chỉ bằng cách sử dụng ftp hoặc lftp?


19

Tôi đang viết một tập lệnh shell Linux để sao chép một thư mục cục bộ vào một máy chủ từ xa (loại bỏ bất kỳ tập tin hiện có nào).

Máy chủ cục bộ: ftplftpcác lệnh có sẵn, không có ncftp hoặc bất kỳ công cụ đồ họa nào.

Máy chủ từ xa: chỉ có thể truy cập qua FTP. Không có rsync cũng không SSH và FXP.

Tôi đang suy nghĩ về việc liệt kê các tệp cục bộ và từ xa để tạo tập lệnh lftp và sau đó chạy nó. Có cách nào tốt hơn?

Lưu ý: Chỉ tải lên các tệp đã sửa đổi sẽ là một điểm cộng, nhưng không bắt buộc.


ncftp là hoàn toàn ra câu hỏi? Sẽ là imho dễ nhất. (và tôi biết nó sẽ làm điều đó khi tôi sử dụng nó theo cách đó)
Sirex

Sirex: Tôi muốn làm điều đó với các công cụ mặc định trên RedHat. Nếu lftp chứng minh không sử dụng được, tôi sẽ thêm một yêu cầu cho người dùng để cài đặt ncftp.
Nicolas Raoul

Cú pháp cho wput(một trình tải lên ftp giống như wget):wput dir/ ftp://user:pass@host/dir
kenorb

Câu trả lời:


39

lftp sẽ có thể làm điều này trong một bước, đặc biệt là lftp mirror:

EDIT: cú pháp lệnh lftp khó hiểu, lời mời ban đầu tôi đã đăng không hoạt động. Hãy thử nó như thế này:

lftp -e "mirror -R {local dir} {remote dir}" -u {tên người dùng}, {password} {host}

lưu ý các trích dẫn xung quanh các đối số để -echuyển đổi.


1
+1 cho tôi biết rằng chế độ nhân bản của lftp hoạt động ngay cả khi FXP không khả dụng (tôi đã bị thuyết phục ngược lại sau khi đọc tut.papamike.ca/pub/lftp.html nói rằng "cả hai máy chủ phải hỗ trợ giao thức này để hoạt động này thành công "). Tuy nhiên, lệnh đặc biệt này không thành công trên máy chủ Ubuntu của tôi: lftp: mirror: Tên hoặc dịch vụ không xác định, lệnh Unknown -R '.
Nicolas Raoul

Tôi đã điều chỉnh lại câu trả lời của mình bằng một lời mời tốt hơn về lftp, hy vọng điều đó có ích.
Phil Hollenback

Cuối cùng tôi đã gt nó để làm việc! Có vẻ như bạn phải chuyển từ xa và cục bộ để nó hoạt động. Hãy cập nhật và tôi sẽ chấp nhận câu trả lời này. Đây là một dòng lệnh hoạt động: lftp -e "mirror -R / tmp / mylocalfiles / var / www" -u remoteuser, remotepassword remoteerver
Nicolas Raoul

Tôi nghĩ rằng tôi đã thấy trong các tài liệu lftp rằng bạn phải chuyển đổi các thư mục cục bộ và từ xa khi sử dụng -R nhưng tôi phải quên. Cập nhật câu trả lời của tôi.
Phil Hollenback

Làm thế nào để nó thất bại? Bạn đã thử chạy 'lftp -vvv' để có đầu ra dài dòng hơn để xác định xem nó đang cố gắng làm gì chưa?
Phil Hollenback

1

Dựa trên ý tưởng của Phil về việc sử dụng chế độ gương của lftp, lệnh này thực hiện thủ thuật:

lftp -c 'open -e "mirror /tmp/thedir ftp://nico:mypass@remotehost/~/destination/" ftp://nico:mypass@localhost'

Một nhược điểm là nó yêu cầu máy chủ cục bộ phải có máy chủ FTP đang chạy.


1
cd {local_dir}
lftp {server}
cd {remote_dir}
mput {local_dir}/*

Điều này làm việc cho tôi, nhiều nỗ lực khác đã thất bại. Khi ở trong lftp, có thêm thông tin qua:

help mput

2
Nó có lẽ sẽ tốt hơn để sử dụng mirror -Rở đây.
gauteh

@gauteh bạn nói đúng. câu trả lời hay nhất ^
austin

0

Cuối cùng cũng có câu trả lời !!! Tạo tập lệnh shell ftpmirror.sh

#!/bin/bash 
path = /local-dir-path
lftp -e "mirror -R $path /$path" -u username,password ftp-server-ip
  • Đường dẫn = thư mục cục bộ mà chúng tôi muốn sao chép vào máy chủ ftp
  • tên người dùng = tên người dùng máy chủ ftp
  • mật khẩu = mật khẩu máy chủ ftp
  • ftp-server-ip = địa chỉ IP của máy chủ ftp

Nếu gói lftp không được cài đặt, nó sẽ được cài đặt bằng yum.

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.