wget -o boş dosyaları hataya yazar


15

Wget "böyle bir adres yok" -o "test.html" yazarsam önce test.html dosyasını oluşturur ve hata durumunda boş bırakır. Ancak, -o kullanılmadığında, indirme işleminin başarılı olup olmadığını görmek için bekler ve ancak bundan sonra dosyayı yazar.

İkinci davranışın -o'ya da uygulanmasını istiyorum, mümkün mü?

Yanıtlar:


17

wget URL bulunamadığında sıfırdan farklı bir çıkış durumu döndürür, böylece hata durumunda bir kaldırma komutu ekleyebilirsiniz:

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

Veya geçici bir dosya oluşturun ve yalnızca başarılı bir şekilde istediğiniz yere taşıyın:

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

İkincisi, hata durumunda mevcut bir dosyayı silmeme avantajına sahiptir, ancak man tempfileparalel olarak birden fazla örnek çalıştırıyorsanız benzersiz geçici adlar kullandığınızdan emin olun (bkz. ).


Ayrıca, --retry-connrefused eklenmesi boş dosyanın ilk etapta önlenmesine yardımcı olabilir.
akom

Bu bir sürerse exec kukla manifest'te, değişen => dosya oluşturur etmek => "[-s dosya]" sürece kendi kendini iyileştirme yapabiliriz.
akom

14

Yorumlarda yazıldığı wget -O gibi , hatalardan bağımsız olarak her zaman dosyaya yazan bir kabuk yönlendirme gibidir .

Bunun curl -fyerine şunları kullanabilirsiniz :

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

Dosya getirilirken bir hata oluşursa yerel dosyaya dokunmaz.


4

Doğru sözdizimi

wget "url" -O file

BÜYÜK HARF dikkat edin. -o seçenekleri wget'e bir günlük dosyası yazmasını söyler , bu yüzden her zaman hata durumunda bile yazılır.


İlk başta işe yaradığını düşündüm, ama sonra işe yaramadığını gördüm. try wget " host.does.not.exist " -O "emptyFile" Bir hata döndürüldü, ancak emptyFile oluşturuldu.
akurtser

1
@akurtser haklısın. Bence wget dosyasını yaratmamanın bir yolu yok. Bu konuyu buldum: mail-archive.com/wget@sunsite.dk/msg08586.html konuyu tartıştıkları. Temel, aynı dosyaya ÇOKLU indirme yapabilmenizdir, böylece wget TÜM URL'lerin başarısız olacağından emin olamaz.
Bay Shunz

Teşekkürler, yazdığım bir bash betiğinin bir parçası, bu yüzden önce başarılı bir indirme durumunda yeniden adlandırılacak bir geçici dosyayı kaydetmeye çalışacağım. Çok zarif değil, ama daha iyi bir şey düşünemiyorum.
akurtser

1
@akurtser Şüphesiz dönüş kodunu wget'ten kontrol edebilirsiniz ... dosyayı "bulamazsa" silip silemeyeceğinizi size bildirmelidir. Bu yüzden geçici / yeniden adlandırma gerekmez.
Bay Shunz

1
-O seçeneği, içerik olmadığında bile indirilen içeriği bir dosyaya yönlendiren bir yönlendirme işlemidir. Bu nedenle, indirme başarısız olsa bile her zaman bir dosya oluşturulur.
Quan

0

Yardım doc (wget -h) 'ye göre indirmeyi atlamak için --spider seçeneğini kullanabilirsiniz (sürüm 1.14).

Download:
  -S,  --server-response         print server response.
       --spider                  don't download anything.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.