4

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

4

4 回答 4

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

编辑:向 ls 添加了 'a' 参数

于 2008-09-16T12:55:29.923 回答
1

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

另请注意,目录的创建时间是未知的。只能知道目录最后一次修改的时间,即添加、删除或重命名文件。

于 2008-09-16T12:56:27.050 回答
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

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

于 2008-09-16T13:05:21.180 回答
0

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

#!/bin/bash
ARRAY=( `ls -td */` )
ELEMENTS=${#ARRAY[@]}
COUNTER=4
while [ $COUNTER -lt $ELEMENTS ]; do
  echo ${ARRAY[${COUNTER}]}
  let COUNTER=COUNTER+1
done
于 2008-09-16T13:24:35.283 回答