سؤال
أريد حذف كل 4 أحدث الدلائل في الدليل الأصل.كيف يمكنك أن تفعل هذا في باش ؟
المحلول
ls -atrd */ | head --lines=-4 | xargs rm -rf
تحرير: وأضاف 'a' حجة هل
نصائح أخرى
يرجى توضيح إذا كنت تقصد "حذف جميع الدلائل ولكن أربعة newst منها" أو "حذف كل شيء (الملفات والدلائل) باستثناء أربعة أحدث الدلائل".
يرجى أيضا ملاحظة أن إنشاء مرات لا يعرف عن الدلائل.واحد فقط يمكن أن أقول متى دليل آخر تعديل ، أي أن الملفات إضافة أو إزالة أو إعادة تسمية.
يمكن القيام بما يلي:
#!/bin/bash
#store the listing of current directory in var
mydir=`ls -t`
it=1
for file in $mydir
do
if [ $it -gt 5 ]
then
echo file $it will be deleted: $file
#rm -rf $file
fi
it=$((it+1))
done
(إزالة # قبل rm لجعل ذلك يحدث حقا ;) )
آخر, BSD-آمنة طريقة للقيام بذلك, مع المصفوفات (لماذا لا؟)
#!/bin/bash
ARRAY=( `ls -td */` )
ELEMENTS=${#ARRAY[@]}
COUNTER=4
while [ $COUNTER -lt $ELEMENTS ]; do
echo ${ARRAY[${COUNTER}]}
let COUNTER=COUNTER+1
done
لا تنتمي إلى StackOverflow