كيفية حساب تجزئة السلسلة (url) في باش بالنسبة wget التخزين المؤقت
سؤال
أنا بناء أداة صغيرة من شأنها أن تحميل الملفات باستخدام 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, الخ., لذلك يمكن استخدام النقابي لتخزين قائمة واحدة تم تحميلها و ما الفعلي اسم كان.