Unduh file dengan nama sebenarnya oleh wget

9

Saya mencoba mengunduh file melalui HTTP dari situs web menggunakan wget.

Ketika saya menggunakan:

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

Saya hanya mendapatkan file yang dipanggil index.html?acc=GSE48191.

Ketika saya menggunakan:

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

Saya dapat asd.rpm, tetapi saya ingin mengunduh dengan nama sebenarnya, dan tidak ingin secara manual mengubah nama file yang diunduh.

Neha
sumber
Anda mungkin ingin mengajukan pertanyaan semacam ini di Bioinformatika di lain waktu. Ada di topik di sini juga, dan selamat datang untuk tinggal, tetapi Anda mungkin mendapatkan lebih banyak bantuan dari orang yang bekerja di lapangan.
terdon
3
@terdon Bagaimana bertanya tentang perilaku shell wget dan * nix pada topik di Bioinformatika ?
CVn
1
@ MichaelKjörling mengekstraksi informasi dari NCBI, itu sebabnya saya menyarankannya. Sebuah jawaban di sana kemungkinan akan melibatkan pendekatan yang lebih sederhana, lebih langsung untuk mendapatkan informasi yang dicari OP daripada solusi shell. Sesuatu seperti "Anda bisa mendapatkan informasi ini lebih mudah dari sini" misalnya.
terdon
Lihatlah --trust-server-namesargumen untuk wget-
ivanivan
3
Penting untuk dicatat bahwa tidak ada yang namanya "nama sebenarnya" dari sumber daya yang dirujuk oleh URL. Server web menanggapi permintaan dengan beberapa konten, dan mungkin beberapa tajuk yang menjelaskan konten itu dengan cara tertentu, tetapi tidak harus ada file yang terlibat sama sekali.
IMSoP

Jawaban:

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

File yang Anda unduh adalah tararsip (file biner), yang disediakan oleh tautan dinamis dari server web. wgetbiasanya akan menyimpan file menggunakan bagian dari URL yang Anda gunakan, tetapi dalam hal ini itu hanya titik akhir API ISTIRAHAT (atau yang serupa) sehingga nama itu tidak ramah untuk bekerja dengan (itu masih akan menjadi nama yang valid dan isi file akan sama).

Namun, dalam hal ini server menyediakan tajuk "Disposisi Konten" yang berisi nama file aktual, yang wgetdapat digunakan jika Anda menggunakan --content-dispositionopsi. Opsi ini ditandai "eksperimental" di manual saya untuk wget.

Anda juga perlu mengutip URL agar shell tidak menafsirkan &dan ?karakter di dalamnya.


Hal yang setara menggunakan curl:

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

Atau, menggunakan opsi panjang yang setara:

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

Setelah mengunduh file, Anda harus membukanya:

tar -xvf GSE48191_RAW.tar

Karena cara arsip khusus ini dibuat, ini akan membongkar file arsip ke direktori saat ini (sehingga membuat direktori baru, memindahkan arsip di sana dan membukanya mungkin ada ide bagus). File dalam arsip ini adalah file gzipterkompresi CEL.

Kusalananda
sumber
8

Shell melakukan interpretasi karakter yang biasa, terutama ?sebagai wildcard (yang tidak masalah di sini) dan &sebagai "latar belakang". Anda seharusnya memperhatikan yang terakhir, karena respon shell berbeda dari perintah langsung.

Jadi, Anda perlu mengutip:

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