2011-12-20 33 views
13

Tôi đang viết kịch bản cho bash và tôi cần lấy tên của tệp đã tải xuống bằng wget và đặt tên vào $ stringwget: tên tệp đã tải xuống

ví dụ: nếu tôi tải tệp này xuống dưới đây, tôi muốn đặt nó tên mxKL17DdgUhcr.jpg đến $ string

wget http://pics.sitename.com/images/191211/mxKL17DdgUhcr.jpg 
45439 (44K) [image/jpeg] 
Saving to: «mxKL17DdgUhcr.jpg» 

100%[===================================================================================================>] 45 439  --.-K/s в 0s 

2011-12-20 12:25:33 (388 MB/s) - «mxKL17DdgUhcr.jpg» saved [45439/45439] 

Trả lời

26

Sử dụng lệnh basename để trích xuất tên tệp từ url. Ví dụ:

url=http://pics.sitename.com/images/191211/mxKL17DdgUhcr.jpg 
filename=$(basename "$url") 
wget "$url" 
+0

Làm việc như một nét duyên dáng. Cảm ơn rất nhiều! –

+2

Cảnh báo: Điều này sẽ không hoạt động đối với các url chứa chuyển hướng hoặc nội dung động. Tham khảo câu trả lời của est để có giải pháp đúng. –

11

Bạn chỉ có thể chỉ định tên tập tin trước khi tải về, với các tùy chọn để -Owget:

wget -O myfile.html http://www.example.com/ 
2

Bạn có thể rõ ràng về tên như thế này:

url='http://pics.sitename.com/images/191211/mxKL17DdgUhcr.jpg' 
file=`basename "$url"` 
wget "$url" -O "$file" 
0

Tôi đoán bạn đã có URL đầy đủ của tập tin ở đâu đó trong một biến? Sử dụng mở rộng tham số bash tước tiền tố:

echo ${url##*/} 
1
~ $ URL='http://pics.sitename.com/images/191211/mxKL17DdgUhcr.jpg' 
~ $ echo ${URL##*/} 
mxKL17DdgUhcr.jpg 
~ $ wget $URL -O ${URL##*/} 
--18:34:26-- http://pics.sitename.com/images/191211/mxKL17DdgUhcr.jpg 
      => `mxKL17DdgUhcr.jpg' 
-2

Vì vậy, bạn muốn cung cấp cho các tập tin/tên hình ảnh như tham số

thử này

echo -n "Give me the name of file in http://pics.sitename.com/images/191211/ :" 

read $string 

sudo wget http://pics.sitename.com/images/191211/$string ;; 

Tôi nghĩ rằng đây có thể giúp bạn

27
wget --server-response -q -O - "https://very.long/url/here" 2>&1 | 
    grep "Content-Disposition:" | tail -1 | 
    awk 'match($0, /filename=(.+)/, f){ print f[1] }') 

Đây là phiên bản chính xác vì có thể có một số chuyển hướng 301/302 và cuối cùng là tiêu đề Content-Disposition: để đặt tên tệp

Tên tệp đoán dựa trên URL không phải lúc nào cũng chính xác.

+2

Tôi thích cách tiếp cận này, nhưng tiếc là sự lúng túng trong các dẫn xuất Debian (Ubuntu, ví dụ) không hỗ trợ đối số thứ 3 trong 'match'. – jtravaglini

+0

trong khi không phải luôn luôn hoàn toàn chính xác đây là cách tiếp cận chính xác. – diedthreetimes

+1

Trong Ubuntu, bạn có thể sử dụng: 'wget --server-response -q -O -" https: //very.long/url/here "2> & 1 | grep "Nội dung-Bố trí:" | đuôi -1 | awk -F "filename =" '{print $ 2}' ' –

2

Để xử lý tên tập tin URL mã hóa:

URL="http://www.example.com/ESTAD%C3%8DSTICA(2012).pdf" 
BASE=$(basename ${URL})    # ESTAD%C3%8DSTICA(2012).pdf 
FILE=$(printf '%b' ${BASE//%/\\x}) # ESTADÍSTICA(2012).pdf 
wget ${URL} 
Các vấn đề liên quan