Tulis keluaran wget atau curl ke nama file khusus berdasarkan url

12

Misalnya saya punya tautan http://www.abc.com/123/def/ghi/jkl.mno. Saya ingin mengunduhnya menggunakan wgetatau curldan mendapatkan nama file output sebagai def_ghi_jkl.mno, di mana bagian def_ghitersebut diambil dari tautan.

Saya akan menempatkan wgetperintah ini dalam skrip untuk mengunduh banyak file sehingga tidak dapat memberikan nama file output secara eksplisit.

gvz
sumber

Jawaban:

15

curlmemiliki opsi -o, --outputyang mengambil argumen tunggal yang menunjukkan keluaran nama file harus ditulis alih-alih stdout. Jika Anda menggunakan {}atau []untuk mengelilingi elemen dalam URL (biasanya digunakan untuk mengambil beberapa dokumen), Anda dapat menggunakan #diikuti oleh nomor dalam specifier nama file. Setiap variabel seperti itu akan diganti dengan string yang sesuai untuk URL yang diambil. Untuk mengambil beberapa file, tambahkan daftar token yang dipisahkan koma di dalam {}. Jika bagian URL yang akan diambil adalah nomor urut, Anda dapat menentukan rentang dengan [].

Contoh:

  curl http://www.abc.com/123/{def}/{ghi}/{jkl}.mno -o '#1_#2_#3.mno'

Perhatikan tanda kutip di sekitar argumen opsi (tidak diperlukan kecuali nama file dimulai dengan salah satu variabel yang diperluas). Ini akan menghasilkan file output def_ghi_jkl.mno.

  curl http://www.abc.com/123/{def}/{ghi}/{jkl,pqr,stu}.mno -o '#1_#2_#3.mno'

Ini akan menghasilkan file output def_ghi_jkl.mno, def_ghi_pqr.mnodan def_ghi_stu.mno.

 curl http://www.abc.com/123/{def}/{ghi}/[1-3].mno -o '#1_#2_#3.mno'

Hal ini akan menghasilkan file output def_ghi_1.mno, def_ghi_2.mno, def_ghi_3.mno.

Thomas Nyman
sumber
2

wgetmemiliki saklar -O(bentuk panjang --output-document) yang memungkinkan Anda menentukan nama file yang akan disimpan. (Agaknya ikal memiliki sesuatu yang serupa.) Jadi Anda bisa melakukan:

wget -O def_ghi_jkl.mno http://www.abc.com/123/def/ghi/jkl.mno

dan itu akan melakukan apa yang Anda inginkan.

Anda mungkin dapat membuat wrapper sekitar wget jika Anda ingin mengotomatiskan skema penamaan ini, tetapi akan sangat sulit untuk mendapatkan bukti-peluru dan jelas berada di luar cakupan jawaban ini. (Kasus sederhana dari satu file yang diunduh dari URL eksplisit seharusnya tidak terlalu sulit untuk diperbaiki, tetapi itu bukan satu-satunya mode operasi wget. Untuk menyebutkan hanya satu kasus yang membuat ini sedikit non-sepele, Anda dapat menentukan beberapa URL di baris perintah.)

Perhatikan bahwa -Otidak sama sekali dengan -o, yang menulis output wget sendiri ke file bernama.

sebuah CVn
sumber
Itu bagian dari skrip, memberikan nama file secara eksplisit seperti itu tidak akan berfungsi.
gvz
@ user47567 Mengapa tidak? Bagaimana dengan fakta bahwa wget atau curl dipanggil dari sebuah skrip membuat ini tidak praktis? (Dan sungguh, jika Anda memiliki kendala seperti pada jawaban apa yang akan bekerja, informasi itu harus benar-benar masuk ke pertanyaan dari awal.)
CVn
0

Berikut ini beberapa trik Substitusi Bash

link="http://www.abc.com/123/def/ghi/jkl.mno"
OutputFile=$( echo ${link:23: 23}| tr "/" "_" )
echo $OutputFile
def_ghi_jkl.mno

{$link:23: 23}akan menghapus " http://www.abc.com/123/ " itu ${parameter:offset:length}, kemudian trakan diganti /menjadi _.

Jadi sekarang Anda dapat dengan mudah menggunakan dengan wget atau curl

wget $link  -O $OutputFile

Kita juga dapat menggunakan awk, ini akan mengekstrak tiga yang terakhir diajukan dari string input:

OutputFile=$( echo $link | awk -F/ 'BEGIN{OFS="_"}{ print $( NF-2),$(NF - 1 ),$NF}' )
Rahul Patil
sumber
0

Nama file yang Anda butuhkan tidak dapat diturunkan dengan wgetsendirinya, sehingga harus ditangani oleh skrip shell:

$ url='http://www.example.com/123/def/ghi/jkl.mno'
$ outFile=$(echo "$url" | cut -d /  -f 5- | tr / _)
$ echo $outFile 
def_ghi_jkl.mno
$ wget "$url" -O "$outFile"

Atau jika Anda suka sebagai satu baris:

wget "$url" -O "$(echo "$url" | cut -d /  -f 5- | tr / _)"
Volker Siegel
sumber
0

Jika Anda lebih suka ikal, cara paling langsung adalah:

curl -L -o <filename> "https://drive.google.com/uc?export=download&id=<file id>"

nama file: nama file yang diunduh

id file: id file dalam tampilan web google drive dalam format https://drive.google.com/file/d/ file id / view

Kacang Agile
sumber