Saya mengunduh situs dengan wget dan banyak tautan memiliki kueri yang menyertainya, jadi ketika saya melakukan ini:
wget -nv -c -r -H -A mp3 -nd http://url.to.old.podcasts.com/
Saya berakhir dengan banyak file seperti ini:
1.mp3?foo=bar
2.mp3?blatz=pow
3.mp3?fizz=buzz
Yang ingin saya akhiri adalah:
1.mp3
2.mp3
3.mp3
Ini semua terjadi di linux ubuntu dan saya punya wget 1.10.2.
Saya tahu saya bisa melakukan ini setelah saya mendapatkan semuanya melalui skrip untuk mengubah nama semuanya. Namun saya benar-benar menginginkan solusi dari dalam wget sehingga saya dapat melihat nama yang benar ketika unduhan sedang terjadi.
Adakah yang bisa membantu saya mengungkap ini?
wget
perintah (jika tidak lebih sedikit).Jawaban:
Jika servernya baik, mungkin menempel pada header Content-Disposition pada unduhan yang memberi tahu klien Anda nama file yang benar. Memberitahu wget untuk mendengarkan tajuk itu untuk nama file terakhir semudah:
Anda memerlukan versi agak baru untuk menggunakan fitur ini.
Saya tidak tahu seberapa baik menangani server yang mengklaim nama file '/ etc / passwd'.
sumber
?v=blah
jenis versioning di dalamnya. Mungkin ada beberapa cara khusus cloudfront untuk meminta dokumen tanpa ini, saya tidak tahu, tetapi saya gagal menemukannya, jadi sesuatu seperti salah satu jawaban lain mungkin diperlukan dalam kasus seperti itu. (Jika ada yang tahu cara melucuti - atau membuat Cloudfront tidak melayani -v=
senar, saya akan senang mendengarnya.)Saya menyadari setelah memproses sejumlah besar yang seharusnya saya perintahkan
wget
untuk mengabaikan string kueri. Saya tidak ingin melakukannya lagi jadi saya membuat skrip ini yang berfungsi untuk saya:Masukkan itu ke dalam file like
rmqstr
danchmod +x rmqstr
Syntax:./rmqstr <directory (defaults to .)>
Ini akan menghapus string kueri dari semua nama file secara rekursif.
sumber
Saya pikir, agar dapat
wget
menyimpan sebagai nama file yang berbeda dari yang ditentukan URL, Anda perlu menggunakan-O filename
argumen. Itu hanya melakukan apa yang Anda inginkan ketika Anda memberinya satu URL - dengan banyak URL, semua konten yang diunduh berakhirfilename
.Tapi itu benar-benar jawabannya. Alih-alih mencoba melakukan semuanya dalam satu
wget
perintah, gunakan beberapa perintah. Sekarang alur kerja Anda menjadi:wget
untuk mendapatkan file HTML dasar yang berisi tautan Anda;mp3
,http://foo/bar/baz.mp3?gargle=blaster
menjadibaz.mp3
wget <URL> -O <filename>
Itu memecahkan masalah Anda, tetapi sekarang Anda perlu mencari cara untuk mengambil file-file dasar untuk menemukan
mp3
URL Anda .Apakah Anda memiliki URL situs / basis tertentu? Langkah 1 dan 3 akan lebih mudah ditangani dengan contoh nyata.
sumber
BAIK. Gunakan wget seperti biasa; gunakan skrip post-wget yang biasa Anda gunakan, tetapi proseskan output wget agar lebih mudah dilihat:
Ini masih akan menunjukkan
?foo=bar
saat Anda mengunduh, tetapi akan menampilkan sisa nama dalam cyan cerah.sumber
Saya memiliki pendekatan yang sama dengan @Gregory Wolf karena kodenya selalu membuat pesan kesalahan seperti ini:
Jadi saya pertama kali memeriksa apakah ada string kueri dalam nama file sebelum memindahkan file:
Ini akan secara rekursif memeriksa setiap file dan menghapus semua string permintaan dalam nama file mereka jika tersedia.
sumber
Lihatlah dua perintah yang saya buat untuk mengkloning sebuah situs, dan setelah mengkloning selesai, Anda dapat menjalankan perintah kedua.
Perintah kedua akan melihat di seluruh klon, mencari nama pola file " ? ", Dan akan menghapus string kueri dari nama file.
(Lihat di GitHub Gist .)
sumber
Yang lebih mudah adalah ini: /unix/196253/how-do-you-rename-files-specifically-in-a-list-that-wget-will-use
Ini menyarankan metode yang pada dasarnya menggunakan fungsi ganti nama wget (dapat diubah untuk memasukkan direktori) untuk banyak file. Lihat versi kedua yang diusulkan.
sumber