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?

akurtser
sumber

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.

Ian Mackinnon
sumber
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.

cweiske
sumber
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.

Mr Shunz
sumber
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/[email protected]/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