كيفية استخدام شيل فحص آخر مرة تغير من ملف
سؤال
وأريد أن أجد إذا تم تغيير بعض الملفات في الدقائق الثلاث الأخيرة من أجل أن تقرر ما إذا كان cp
ناجحة، وإذا كان ينبغي أن exit
أو مواصلة النصي. كيف يمكنني أن أفعل ذلك؟
والشكر
المحلول
ويمكنك الحصول على وقت التعديل الأخير من ملف مع stat
، والتاريخ الحالي مع date
. يمكنك استخدام سلاسل التنسيق على حد سواء للحصول عليها في "ثانية منذ عصر":
current=`date +%s`
last_modified=`stat -c "%Y" $file`
وبعد ذلك، فإنه من السهل جدا لوضع هذا في حالة. على سبيل المثال:
if [ $(($current-$last_modified)) -gt 180 ]; then
echo "old";
else
echo "new";
fi
نصائح أخرى
وبناء الجملة هذا إذا يعتمد على بيان قذيفة معينة، ولكن الأوامر التاريخ لا. يمكنني استخدام باش. تعديل عند الضرورة.
if [ $(( $(date +%s) - $(date +%s -r <file>) )) -le 180 ]; then
# was modified in last three minutes
else
# was not modified in last three minutes
fi
وو+%s
يروي تاريخ لإخراج الوقت UNIX (بت المهم هو أنه عدد صحيح في ثانية). يمكنك أيضا استخدام القانون الأساسي للحصول على هذه المعلومات - وstat -c %Y <file>
القيادة هو ما يعادلها. تأكد من استخدام %Y
لا %y
، حتى يتسنى لك الحصول على وقت للاستخدام في ثوان.
وسوف الأمر القانون الأساسي تعطيك وقت التعديل الأخير
stat -c %y <filename>
والبحث يمكن إخراج اسم الملف إذا كان قد تم تعديل في آخر 3 دقائق.
find file1 -maxdepth 0 -mmin -3
وتغيير الطابع الزمني ملف لا يعني حقا نسخت بنجاح.
إذا كنت تصل الأرض إتلاف الملف أو نظام ملف نفدت مساحة،
وربما كنت لا تزال ترى تغيير الطابع الزمني (في حاجة لتأكيد ذلك).
وأنا لا أحصل على سياق الدقيق للاحتياجات الخاصة بك.
إذا كنت اطلاق النار على cp
، فإنه يكمل والعوائد - لا يرجع في حين أنها تعمل
.
لذلك، ليس عودة (مع رمز النجاح الخروج) مؤشرا جيدا للنجاح؟
وكيف ولماذا قمت بإنهاء جزئيا ضمن عملية cp
منتديات
أو، هل هذا السيناريو cp
دفعة حلقات على قائمة الملفات ...
فإن بعض وضع يساعد.