Lưu tập tin vào thư mục cụ thể bằng lệnh curl


182

Trong tập lệnh shell, tôi muốn tải xuống một tệp từ một số URL và lưu nó vào một thư mục cụ thể. Cờ CLI cụ thể mà tôi nên sử dụng để tải tệp xuống một thư mục cụ thể bằng curllệnh hoặc làm cách nào khác để tôi nhận được kết quả đó?


Có vẻ như lập trình bash đang lập trình ...
rjurney

Câu trả lời:


282

Tôi không nghĩ bạn có thể đưa ra một đường dẫn để cuộn tròn, nhưng bạn có thể CD vào vị trí, tải xuống và quay lại CD.

cd target/path && { curl -O URL ; cd -; }

Hoặc sử dụng subshell.

(cd target/path && curl -O URL)

Cả hai cách sẽ chỉ tải xuống nếu đường dẫn tồn tại. -Ogiữ tên tập tin từ xa. Sau khi tải về nó sẽ trở về vị trí ban đầu.

Nếu bạn cần đặt tên tệp rõ ràng, bạn có thể sử dụng -otùy chọn nhỏ :

curl -o target/path/filename URL

2
Tôi có lệnh này: curl -LOk basename /packages" github.com/ziyaddin/xampp/archive/master.zip ". Nhưng nó nói sai tên tệp ->basename /packages
Ziyaddin Sadigov

10
Bạn cũng có thể sử dụng một subshell, như vậy:(cd target/path; curl -O URL)
Ehtesh Choudhury

9
Sự khác biệt giữa hai là gì? Đĩa CD đầu tiên vào thư mục và tải tệp xuống, sau đó chuyển ra. Thứ hai ở trong thư mục hiện tại và tập tin curls đến vị trí cụ thể. Thứ hai có vẻ đơn giản hơn.
Henry Zhu

9
@HenryZhu Trong lần đầu tiên, tên tệp được lấy từ tên của tệp trên máy chủ. Trong lần thứ hai, bạn sẽ đổi tên nội dung bạn đã tải xuống thành tên bạn cung cấp.
turtlemonvh

4
Tôi thực sự muốn có một tùy chọn để chỉ định một thư mục, nhưng sử dụng tên tệp của máy chủ. Có vẻ như sử dụng cdlà lựa chọn tốt nhất hiện tại, mặc dù có vẻ hơi không phù hợp.
StockB

4

curlkhông có tùy chọn cho điều đó (mà không chỉ định tên tệp), nhưng wgetkhông. Các thư mục có thể là tương đối hoặc tuyệt đối. Ngoài ra, thư mục sẽ tự động được tạo nếu nó không tồn tại.

wget -P relative/dir "$url"

wget -P /absolute/dir "$url"
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.