删除除4个最新目录以外的所有目录

时间:2020-03-05 18:55:49  来源:igfitidea点击:

我想删除父目录中除4个最新目录以外的所有目录。我们将如何在Bash中做到这一点?

解决方案

回答

ls -atrd */ | head --lines=-4 | xargs rm -rf

编辑:在ls中添加了'a'参数

回答

请说明是否要删除除四个最新目录以外的所有目录,或者删除除四个最新目录以外的所有内容(文件和目录)。

另请注意,目录的创建时间未知。人们只能说出目录的最后修改时间,即文件的添加,删除或者重命名的时间。

回答

我们可以执行以下操作:

#!/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