wget -o menulis file kosong pada kegagalan


12

Jika saya menulis wget "tidak ada alamat seperti itu" -o "test.html" pertama kali membuat test.html dan jika gagal, biarkan kosong. Namun, ketika tidak menggunakan -o, itu akan menunggu untuk melihat apakah unduhan berhasil dan hanya setelah itu, ia akan menulis file.

Saya ingin perilaku yang terakhir diterapkan pada -o juga, mungkinkah?

Jawaban:


15

wget mengembalikan status keluar nol ketika URL tidak ditemukan, sehingga Anda dapat menambahkan perintah penghapusan pada kegagalan:

wget "url" -O file || rm -f file

Atau buat file sementara dan hanya pindahkan ke tempat yang Anda inginkan untuk sukses:

wget "url" -O /tmp/wget && mv /tmp/wget file

Yang kedua memiliki manfaat tidak menghapus file yang ada pada kegagalan, tetapi pastikan untuk menggunakan nama sementara yang unik (lihat man tempfile ) jika Anda menjalankan beberapa instance secara paralel.


Juga menambahkan --tak coba lagi dapat membantu mencegah file kosong sejak awal.
akom

Jika ini terjadi dalam eksekutif dalam manifes wayang, berubah menciptakan = & gt; mengajukan untuk kecuali = & gt; "[-s file]" dapat membuatnya sembuh sendiri.
akom

10

Seperti yang tertulis di komentar, wget -O lebih seperti pengalihan shell yang selalu menulis ke dalam file terlepas dari kesalahan.

Kamu bisa memakai curl -f sebagai gantinya:

curl -f http://nonexistent/file.jpg -o localfile.jpg

Itu tidak akan menyentuh file lokal jika ada kesalahan mengambil file.


4

Sintaks yang benar adalah

wget "url" -O file

perhatikan UPPERCASE O. Opsi -o memberi tahu wget untuk menulis file log , karena itu selalu ditulis bahkan pada kegagalan.


Pada awalnya saya pikir itu berhasil, tetapi kemudian saya menemukan itu tidak berhasil. coba wget " host.does.not.exist "-O" emptyFile "Kesalahan dikembalikan, namun blankFile dibuat.
akurtser

1
@ akurtser Anda benar. Saya pikir tidak ada cara untuk memberitahu wget untuk tidak membuat file. Saya menemukan utas ini: mail-archive.com/wget@sunsite.dk/msg08586.html di mana mereka membahas masalah ini. Bawaannya adalah bahwa Anda dapat mengunduh MULTIPLE ke file yang sama sehingga akan dibuat karena wget tidak dapat memastikan bahwa SEMUA URL akan gagal.
Mr Shunz

Yah terima kasih, ini adalah bagian dari skrip bash yang saya tulis, jadi saya hanya akan mencoba untuk pertama-tama menyimpannya sebagai file temp, yang jika berhasil diunduh, akan diganti namanya. Tidak terlalu elegan, tetapi tidak bisa memikirkan hal lain yang lebih baik.
akurtser

1
@akurtser Tentunya Anda dapat memeriksa kode kembali dari wget lalu ... itu akan memberi tahu Anda jika Anda dapat menghapus file "jika tidak ditemukan". Jadi tidak perlu untuk temp / penggantian nama.
Mr Shunz

1
Opsi -O adalah pengalihan, yang mengalihkan konten yang diunduh ke file, bahkan dalam kasus ketika tidak ada konten. Karena itu, file selalu dibuat, bahkan jika unduhan gagal.
Quan To
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.