Tải tập tin với tên thật bằng wget


9

Tôi đang cố tải xuống một tệp thông qua HTTP từ một trang web bằng cách sử dụng wget.

Khi tôi sử dụng:

wget http://abc/geo/download/?acc=GSE48191&format=file

Tôi chỉ nhận được một tập tin gọi index.html?acc=GSE48191.

Khi tôi sử dụng:

wget http://abc/geo/download/?acc=GSE48191&format=file -o asd.rpm

Tôi nhận được asd.rpm, nhưng tôi muốn tải xuống với tên thật và không muốn tự thay đổi tên của tệp đã tải xuống.


Bạn có thể muốn hỏi loại câu hỏi này về Tin sinh học vào lần tới. Đó cũng là chủ đề ở đây, và hoan nghênh ở lại, nhưng bạn có thể nhận được nhiều sự giúp đỡ hơn từ những người làm việc trong lĩnh vực này.
terdon

3
@terdon Làm thế nào để hỏi về wget và * nix shell behavior về chủ đề Tin sinh học ?
CVn

1
@ MichaelKjorling trích xuất thông tin từ NCBI sẽ là, đó là lý do tại sao tôi đề xuất nó. Một câu trả lời có thể sẽ liên quan đến một cách tiếp cận trực tiếp, đơn giản hơn để có được thông tin mà OP đang tìm kiếm hơn là một giải pháp vỏ. Ví dụ như "bạn có thể lấy thông tin này dễ dàng hơn từ đây".
terdon

Nhìn vào --trust-server-namesđối số để wget-
ivanivan

3
Điều quan trọng cần lưu ý là không có thứ gọi là "tên thực tế" của tài nguyên được tham chiếu bởi một URL. Một máy chủ web đáp ứng yêu cầu với một số nội dung và có thể một số tiêu đề mô tả nội dung đó theo một cách nào đó, nhưng hoàn toàn không phải là một tệp liên quan.
IMSoP

Câu trả lời:


30
wget --content-disposition 'https://www.ncbi.nlm.nih.gov/geo/download/?acc=GSE48191&format=file'

Tệp bạn đang tải xuống là tartệp lưu trữ (tệp nhị phân), được cung cấp bởi liên kết động từ máy chủ web. wgetthông thường sẽ lưu tệp bằng một phần URL mà bạn đang sử dụng, nhưng trong trường hợp này chỉ là điểm cuối API REST (hoặc một cái gì đó tương tự) để tên đó không thân thiện để làm việc (nó vẫn là tên hợp lệ và nội dung tập tin sẽ giống nhau).

Tuy nhiên, trong trường hợp này, máy chủ cung cấp tiêu đề "Bố trí nội dung" chứa tên tệp thực tế, wgetcó thể sử dụng nếu bạn sử dụng --content-dispositiontùy chọn. Tùy chọn này được đánh dấu "thử nghiệm" trong hướng dẫn của tôi cho wget.

Bạn cũng cần trích dẫn URL để shell không diễn giải các ký tự &?ký tự trong đó.


Điều tương đương bằng cách sử dụng curl:

curl -J -O 'https://www.ncbi.nlm.nih.gov/geo/download/?acc=GSE48191&format=file'

Hoặc, sử dụng các tùy chọn dài tương đương:

 curl --remote-header-name --remote-name 'https://www.ncbi.nlm.nih.gov/geo/download/?acc=GSE48191&format=file'

Khi bạn đã tải xuống tệp, bạn cần giải nén nó:

tar -xvf GSE48191_RAW.tar

Do cách lưu trữ cụ thể này được tạo, điều này sẽ giải nén các tệp của kho lưu trữ vào thư mục hiện tại (vì vậy việc tạo một thư mục mới, di chuyển kho lưu trữ ở đó và giải nén nó có thể là một ý tưởng hay). Các tập tin trong kho lưu trữ này là các tập tin gzipnén CEL.


8

Shell thực hiện việc giải thích thông thường cho các ký tự, đặc biệt ?là ký tự đại diện (không quan trọng ở đây) và &như "đặt vào nền". Bạn nên chú ý đến cái sau, bởi vì phản hồi shell khác với lệnh trực tiếp.

Vì vậy, bạn cần trích dẫn:

wget 'http://abc/geo/download/?acc=GSE48191&format=file'
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.