هل هناك حليقة/wget الخيار الذي يقول عدم حفظ الملفات عند http الأخطاء ؟

StackOverflow https://stackoverflow.com/questions/89989

  •  01-07-2019
  •  | 
  •  

سؤال

أريد تحميل الكثير من عناوين url في السيناريو ولكن أنا لا أريد أن حفظ تلك التي تؤدي إلى HTTP الأخطاء.

بقدر ما أستطيع أن أقول من صفحات الرجل لا curl أو wget توفر هذه الوظيفة.لا أحد يعرف عن آخر تنزيل من يفعل ؟

هل كانت مفيدة؟

المحلول

بطانة واحد فقط الإعداد لهذا الغرض:

(يعمل فقط مع ملف واحد ، قد يكون من المفيد للآخرين)

A=$$; ( wget -q "http://foo.com/pipo.txt" -O $A.d && mv $A.d pipo.txt ) || (rm $A.d; echo "Removing temp file")

هذا سوف تحاول تحميل الملف من المضيف البعيد.إذا كان هناك خطأ الملف لا يتم الاحتفاظ.في جميع الحالات الأخرى ، حفظت اسمها.

نصائح أخرى

أعتقد -f الخيار curl يفعل ما تريد:

-f, --fail

(HTTP) تفشل بصمت (لا الإخراج على الإطلاق) على الخادم الأخطاء.ويتم ذلك في الغالب إلى الأفضل تمكين البرامج النصية وغيرها من الأفضل التعامل مع المحاولات الفاشلة.في الحالات العادية عند HTTP فشل ملقم لتقديم وثيقة ، فإنه يعود مستند HTML تفيد ذلك (والتي غالبا ما كما يصف لماذا وأكثر).هذا العلم سوف يمنع حليقة من إخراج ذلك ، عودة خطأ 22.[...]

ومع ذلك ، إذا كان الرد في الواقع 301 أو 302 توجيه هذا لا يزال يحصل على حفظها ، حتى لو وجهتها شأنه أن يؤدي إلى خطأ:

$ curl -fO http://google.com/aoeu
$ cat aoeu
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/aoeu">here</A>.
</BODY></HTML>

لمتابعة إعادة توجيه إلى طريق مسدود ، كما تعطي -L الخيار:

-L, --location

(HTTP/HTTPS) إذا كان الملقم تقارير تفيد بأن الصفحة المطلوبة انتقلت إلى مختلف الموقع (المشار إليها مع الموقع:رأس 3XX رمز الاستجابة) ، فإن هذا الخيار جعل حليقة إعادة الطلب على المكان الجديد.[...]

القديمة الخيط..هبطت هنا تبحث عن حل...انتهى من كتابة بعض شل كود للقيام بذلك.

if [ `curl -s -w "%{http_code}" --compress -o /tmp/something \
      http://example.com/my/url/` = "200" ]; then 
  echo "yay"; cp /tmp/something /path/to/destination/filename
fi

هذا وسوف تحميل الإخراج إلى ملف tmp و إنشاء/الكتابة فوق ملف الإخراج إلا إذا وضع 200.بلدي usecase هو مختلفة قليلا..في حالة إخراج يأخذ > 10 ثوان لتوليد...وأنا لا أريد الملف الوجهة أن تبقى فارغة على ذلك مدة.

لدي مشكلة اقتراح, فإنه لا تحميل الملف ولكن أيضا يزيل ذلك إذا كان حجمها 0 (والذي يحدث إذا 404 يحدث).

wget -O <filename> <url/to/file>
if [[ (du <filename> | cut -f 1) == 0 ]]; then
    rm <filename>;
fi;

يعمل على zsh ولكن هل يمكن أن يتكيف مع قذائف أخرى.

ولكن هذا فقط يوفر في المقام الأول إذا كنت توفر -O الخيار

ملاحظة: وأنا أدرك أن هذا هو أكبر سنا السؤال, ولكن أعتقد أنني قد وجدت الحل الأفضل لأولئك الذين يستخدمون wget من أي من الإجابات أعلاه تقدم.

wget -q $URL 2>/dev/null

سيتم حفظ الهدف الملف إلى الدليل المحلي إذا و فقط إذا كان رمز حالة HTTP ضمن 200 مجموعة (موافق).

بالإضافة إلى ذلك, إذا كنت تريد أن تفعل شيئا مثل طباعة خطأ كلما كان الطلب اجتمع مع خطأ, هل يمكن أن تحقق wget الخروج على القانون عن القيم غير الصفرية مثل ذلك:

wget -q $URL 2>/dev/null
if [ $? != 0]; then
    echo "There was an error!"
fi

آمل أن يكون هذا هو مفيدة أن هناك شخص يواجهون نفس القضايا كنت.

تحديث: أنا فقط وضعت هذا في أكثر النصي-على شكل بلدي المشروع ، واعتقدت أن حصة:

function dl {
    pushd . > /dev/null
    cd $(dirname $1)
    wget -q $BASE_URL/$1 2> /dev/null
    if [ $? != 0 ]; then
        echo ">> ERROR could not download file \"$1\"" 1>&2
        exit 1
    fi
    popd > /dev/null
}

يمكنك تحميل الملف بدون حفظ باستخدام "-O -" الخيار كما

wget -O - http://jagor.srce.hr/

يمكنك الحصول على المعلومات في mor http://www.gnu.org/software/wget/manual/wget.html#Advanced-Usage

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top