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

时间:2008-09-16 12:52:23

标签: bash shell

我想删除父目录中除4个最新目录外的所有目录。你会怎么在Bash中做到这一点?

4 个答案:

答案 0 :(得分:9)

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

修改:为ls

添加了'a'参数

答案 1 :(得分:1)

请澄清你的意思是“删除除最新的四个目录之外的所有目录”或“删除除四个最新目录之外的所有目录(文件和目录)”。

另请注意,目录不知道创建时间。人们只能告诉上次修改目录的时间,即添加,删除或重命名文件。

答案 2 :(得分:1)

您可以执行以下操作:

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

(删除#r之前的#以使其真正发生;))

答案 3 :(得分:0)

另一种,BSD安全的方式,使用数组(为什么不呢?)

#!/bin/bash
ARRAY=( `ls -td */` )
ELEMENTS=${#ARRAY[@]}
COUNTER=4
while [ $COUNTER -lt $ELEMENTS ]; do
  echo ${ARRAY[${COUNTER}]}
  let COUNTER=COUNTER+1
done