Cách tải xuống một cách đệ quy một thư mục qua FTP trên Linux [đã đóng]


325

Tôi đang cố gắng ftp một thư mục bằng cách sử dụng máy khách ftp dòng lệnh, nhưng cho đến nay tôi chỉ có thể sử dụng 'get' để nhận các tệp riêng lẻ.


5
câu trả lời đúng là từ ngày 6 tháng 4 năm11 lúc 14:13 bởi lkuty. Đừng sử dụng mget, nó không đệ quy chút nào. trả lời từ ngày 22 tháng 9 năm 08 lúc 9:01 Thibaut Barrère dễ hiểu hơn nhưng phải thêm tùy chọn -l 0như được đề cập trong các nhận xét
chriscatfr

Câu trả lời:


635

Bạn có thể dựa vào wget thường xử lý ftp đúng cách (ít nhất là theo kinh nghiệm của riêng tôi). Ví dụ:

wget -r ftp://user:pass@server.com/

Bạn cũng có thể sử dụng -mđó là phù hợp cho phản chiếu. Nó hiện tương đương với -r -N -l inf.

Nếu bạn có một số ký tự đặc biệt trong chi tiết thông tin xác thực, bạn có thể chỉ định --uservà các --passwordđối số để làm cho nó hoạt động. Ví dụ với đăng nhập tùy chỉnh với các ký tự cụ thể:

wget -r --user="user@login" --password="Pa$$wo|^D" ftp://server.com/

EDIT Như được chỉ ra bởi @asmaier, xem ra ngay cả khi -rlà đệ quy, nó có mức tối đa mặc định là 5:

       -r
       --recursive
           Turn on recursive retrieving.

       -l depth
       --level=depth
           Specify recursion maximum depth level depth.  The default maximum depth is 5.

Nếu bạn không muốn bỏ lỡ các thư mục con, tốt hơn nên sử dụng tùy chọn phản chiếu , -m:

       -m
       --mirror
           Turn on options suitable for mirroring.  This option turns on recursion and time-stamping, sets infinite
           recursion depth and keeps FTP directory listings.  It is currently equivalent to -r -N -l inf
           --no-remove-listing.

121
Sử dụng tốt hơn wget -m( --mirror). wget -rđược giới hạn ở độ sâu đệ quy là 5 theo mặc định.
asmaier

13
Tôi đã phải sử dụng --user--passwordquá trên Red Hat. Điều đáng quên của tôi là: GNU Wget 1.11.4 Red Hat modifiedTôi tự hỏi liệu đó là một phiên bản hay một thứ phân phối ...
devin

61
Bạn có thể đặt mức đệ quy vô hạn với -l 0, do đó không cần sử dụng --mirrorcó thể có một số tác dụng phụ không mong muốn, chẳng hạn như tệp
.listing

28
Tôi sử dụng wget --ask-password -rl 99 ftp://user@server.com. Bằng cách này, mật khẩu không hiển thị với psvà không còn trong lịch sử. Tất nhiên, theo bản chất của ftp, nó được gửi không được mã hóa đến máy chủ.
Walter Tross

7
Nhắc nhở cho newbs bash: bạn sẽ phải sử dụng dấu ngoặc đơn nếu tên người dùng hoặc mật khẩu của bạn có ký tự điều khiển (như $), ví dụ:--user='user' --password='pa$$word'
tobek

164

Chỉ để bổ sung cho câu trả lời được đưa ra bởi Thibaut Barrère.

Tôi đã sử dụng

wget -r -nH --cut-dirs=5 -nc ftp://user:pass@server//absolute/path/to/directory

Lưu ý dấu gạch chéo kép sau tên máy chủ. Nếu bạn không đặt thêm dấu gạch chéo, đường dẫn có liên quan đến thư mục chính của người dùng.

  • -nH tránh việc tạo một thư mục được đặt tên theo tên máy chủ
  • -nc Tránh tạo một tệp mới nếu nó đã tồn tại trên đích (nó chỉ bị bỏ qua)
  • --cut-dirs=5cho phép lấy nội dung của thư mục / perfect / path / to / và đặt nó vào thư mục nơi bạn khởi chạy wget. Số 5 được sử dụng để lọc ra 5 thành phần của đường dẫn. Dấu gạch chéo kép có nghĩa là một thành phần phụ.

3
Xuất sắc. Khả năng bỏ qua các tệp đã tồn tại là rất tốt để bắt kịp với các bổ sung mới nhất khi di chuyển máy chủ. rsync hiệu quả hơn và linh hoạt hơn, nhưng đôi khi tùy chọn đó không khả dụng và chỉ FTP có thể được sử dụng.
Jason

Thông số tốt đẹp ở đây đặc biệt là -nc và --cut-dirs. Cám ơn vì đã chia sẻ!
Lance Cleveland

2
Tôi không luôn tin tưởng "bỏ qua các tệp hiện có" bởi vì một trong hai có thể không đầy đủ hoặc khác nhau về kích thước và nội dung nhưng anh ấy đã đề cập đến tùy chọn này
Daniel W.

Ngay cả ngày nay, tôi vẫn sử dụng lệnh wget này khi không thể sử dụng rsync. Các -nc và --cut-dirs rất hữu ích!
Một nửa điên cuồng

4
Tuyệt vời! Và nếu bạn không muốn đặt mật khẩu của mình vào dòng lệnh, bạn có thể sử dụng --ftp-user=USER--ask-password.
shoover

25
ncftp -u <user> -p <pass> <server>
ncftp> mget directory

Tôi không thể đăng nhập vào máy chủ FTP bằng thông số, nhưng sử dụng cấu trúc open ftp://USERNAME:PASSWORD@HOSTsau khi bắt đầu ncftp
cám

+1 - Tôi biết bài đăng này đã cũ, nhưng tôi mới xem qua nó và ncftp rất dễ sử dụng. Tôi đã sử dụng -R để nhận đệ quy với ncftpget
Zack Macomber

chắc chắn đáng tin cậy hơn wget, và nhanh hơn trong chế độ TAR. Cảm ơn!
lencinhaus

3
Điều này không hoạt động như đã nêu trên Ubuntu 14.04. Cú pháp làm việc với tôi là "thư mục get -R" thay vì mget.
Ivan

Làm việc cho tôi trên Ubuntu 14.04. Tôi không phải quên nó là tất cả chỉ ở đó.
ashley

22

Nếu lftpđược cài đặt trên máy của bạn, sử dụng mirror dir. Và bạn đã hoàn thành. Xem bình luận của Ciro bên dưới nếu bạn muốn tải về một thư mục.


7
btw, mirror -R dirkhông tải lên / cập nhật thư mục đệ quy
Ciro Santilli 郝海东 冠状 病 六四

1
cũng có thể sử dụng mirror ./để tải xuống tất cả các tệp và thư mục theo cách đệ quy trong đường dẫn hiện tại.
Nabi KAZ

Bạn cũng có thể chỉ cần gõ mirror, cho thư mục hiện tại và đó là thư mục con.
Michael

17

Nếu bạn có thể sử dụng scpthay vì ftp, -rtùy chọn sẽ làm điều này cho bạn. Tôi sẽ kiểm tra xem liệu bạn có thể sử dụng cơ chế truyền tệp hiện đại hơn FTP không.


2
Tôi đã bỏ phiếu này vì đó chính xác là suy nghĩ đầu tiên của tôi, mặc dù nó không trả lời đúng câu hỏi như hiện tại.
metao

Bạn đề xuất @ greg-hewgill nào? Tôi có vấn đề tương tự
Michal Gonda

1
scpvẫn sẽ cố gắng sử dụng ssh, sẽ không hoạt động nếu bạn chỉ có thông tin đăng nhập FTP. Cảm thấy kỳ lạ khi trả lời một bình luận từ năm 2008 nói rằng công nghệ mà tôi đang mắc kẹt không phải là hiện đại :( Tốt năm 2008, tôi đã 18 tuổi vào ngày bạn đăng nhận xét của mình.
aexl


7

Có 'ncftp' có sẵn để cài đặt trong linux. Điều này hoạt động trên giao thức FTP và có thể được sử dụng để tải xuống các tệp và thư mục theo cách đệ quy. hoạt động trên linux. Đã được sử dụng và đang hoạt động tốt để chuyển tập tin / thư mục đệ quy.

Kiểm tra liên kết này ... http://www.ncftp.com/


2
ncftp cũng hoạt động trên windows
Ilya

Tôi yêu ncftp! Cảm ơn bạn.
vui vẻ

3

Nếu bạn có thể, tôi thực sự khuyên bạn tarbzip(hoặc gzip, bất cứ điều gì làm nổi thuyền của bạn) thư mục trên máy từ xa đối với một thư mục có kích thước đáng kể, việc tiết kiệm băng thông có lẽ sẽ đáng để dành thời gian để nén / giải nén.


Có thể vào năm 2008, nhưng năm 2013 băng thông không còn quan trọng nữa và bạn có thể có FTP nhưng không truy cập bảng điều khiển :-)
Daniel W.

3

Nếu bạn muốn dính vào dòng lệnh FTP, bạn nên thử NcFTP. Sau đó, bạn có thể sử dụng get -R để đệ quy một thư mục. Bạn cũng sẽ được hoàn thành.


3

wget -r ftp://url

Hoạt động hoàn hảo cho Redhat và Ubuntu


1

Bạn không nên sử dụng ftp. Giống như telnetnó không sử dụng các giao thức bảo mật và mật khẩu được truyền đi trong văn bản rõ ràng. Điều này giúp các bên thứ ba dễ dàng nắm bắt tên người dùng và mật khẩu của bạn.

Để sao chép các thư mục từ xa, các tùy chọn này tốt hơn:

  • rsynclà công cụ phù hợp nhất nếu bạn có thể đăng nhập qua ssh, vì nó chỉ sao chép các khác biệt và có thể dễ dàng khởi động lại ở giữa trong trường hợp kết nối bị ngắt.

  • ssh -r là tùy chọn tốt thứ hai để sao chép đệ quy cấu trúc thư mục.

Xem:


không an toàn, chỉ cần ftp
JosFabre

đó là năm 2015. FTP không nên được sử dụng.
Tilo

1
Tôi đồng ý. Và đề xuất cho bảo mật tốt hơn nên luôn luôn được đưa ra. Nhưng câu hỏi là về FTP, vì vậy nói rằng người ta không nên sử dụng nó không có ích
JosFabre

Tôi tôn trọng không đồng ý. Họ đang sử dụng công cụ sai cho công việc. Họ nên học cách sử dụng các công cụ an toàn và hiện tại, thay vì ftp 1980. Cụ thể hơn, không ai nên chạy máy chủ ftp nữa: P
Tilo

4
Xin lỗi, nhưng tuần trước tôi đã truy cập vào một máy chủ chỉ có kết nối FTP. Nhiệm vụ của tôi là phải di chuyển đi từ nó.
Antti Haapala

-6

chuyển lời nhắc bằng lệnh PROMPT.

Sử dụng:

ftp>cd /to/directory    
ftp>prompt    
ftp>mget  *

8
Down0-Voteed: mget không được đệ quy.
Lance Cleveland
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.