كيفية حساب تجزئة السلسلة (url) في باش بالنسبة wget التخزين المؤقت

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

  •  05-07-2019
  •  | 
  •  

سؤال

أنا بناء أداة صغيرة من شأنها أن تحميل الملفات باستخدام wget قراءة عناوين المواقع من ملفات مختلفة.نفس العنوان قد تكون موجودة في مختلف الملفات ؛ url بل قد تكون موجودة في ملف واحد عدة مرات.سيكون غير فعال إلى تحميل الصفحة عدة مرات (في كل مرة url الموجودة في قائمة(s)).

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

التي من شأنها أن تكون واضحة جدا;ومع ذلك عناوين طويلة جدا (العديد والعديد من الحصول على المعلمات) وبالتالي لا يمكن استخدامها على هذا النحو عن أسماء (wget يعطي خطأ 'لا يمكن الكتابة...[] اسم الملف طويل جدا').

لذا تحتاج إلى إعادة تسمية الملفات التي تم تحميلها.ولكن آلية التخزين المؤقت إلى العمل ، إعادة تسمية مخطط لتنفيذ "عنوان url واحد <=> اسم واحد":إذا كان عنوان url معين يمكن أن يكون لها أسماء متعددة ، التخزين المؤقت لا يعمل (أي إذا كنت ببساطة عدد الملفات في النظام وجدوا ، لن أسمح wget تحديد عناوين url التي تم تحميلها بالفعل).

أبسط تسمية المخطط سيكون على حساب تجزئة md5 اسم الملفلا من الملف نفسه ، وهو ما md5sum لا);تضمن الملف هي فريدة من نوعها و هذا عنوان معين النتائج دائما نفس الاسم.

فمن الممكن أن تفعل هذا في بيرل ، وما إلى ذلك ، ولكن يمكن أن يتم ذلك مباشرة في باش أو باستخدام أداة إدارة النظام (ريدهات)?

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

المحلول

يبدو أنك تريد md5sum نظام المساعدة.

URLMD5=`/bin/echo $URL | /usr/bin/md5sum | /bin/cut -f1 -d" "`

إذا كنت ترغب فقط إنشاء تجزئة على اسم الملف, يمكنك الحصول عليها بسرعة مع sed:

FILENAME=`echo $URL | /bin/sed -e 's#.*/##'`
URLMD5=`/bin/echo $FILENAME | /usr/bin/md5sum | /bin/cut -f1 -d" "`

علما أنه اعتمادا على التوزيع ، فإن الطريق إلى cut قد يكون /usr/bin/cut.

نصائح أخرى

ليس لدي مندوب التعليق على الإجابة لكن هناك توضيح ابسيلون رئيس الجواب:بشكل افتراضي, صدى طباعة السطر في نهاية النص.إذا كنت تريد md5 مبالغ تتطابق مع ما سيتم إنشاؤها بواسطة أي أداة أخرى (مثل php, Java هو md5, الخ) تحتاج إلى استدعاء

echo -n "$url"

والتي من شأنها قمع السطر.

خيارات أخرى على بلدي أوبونتو (الدقيق) مربع:

  • echo -n $STRING | sha512sum
  • echo -n $STRING | sha256sum
  • echo -n $STRING | sha224sum
  • echo -n $STRING | sha384sum
  • echo -n $STRING | sha1sum
  • echo -n $STRING | shasum

خيارات أخرى على بلدي ماك:

  • echo -n $STRING | shasum -a 512
  • echo -n $STRING | shasum -a 256
  • الخ.

إصدارات أحدث من باش توفر مجموعة النقابي ، فضلا عن مجموعة مفهرسة.شيء مثل هذا قد عمل لك:

declare -A myarray
myarray["url1"]="url1_content"
myarray["url2"]=""

if [ ! -z ${myarray["url1"]} ] ; then 
    echo "Cached";
fi

wget عادة إعادة تسمية الملفات مع الملف.html.1, .2, الخ., لذلك يمكن استخدام النقابي لتخزين قائمة واحدة تم تحميلها و ما الفعلي اسم كان.

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