سؤال

أريد حذف كل 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top