linux ksh如何删除除最新的一些目录之外的所有目录

时间:2013-01-31 00:37:15

标签: linux shell ksh

我正在使用Linux ksh删除一些我不想要的旧目录。

我使用的是:

   #! /bin/ksh
   OLD=/opt/backup
   DIR_PREFIX="active"
   DIRS=$(ls ${OLD} -t | grep ${DIR_PREFIX})
   i=0
   while [[ $i -lt ${#DIRS[*]} ]]; do
       if [ $i -gt 4 ];
      then
          echo ${DIRS[$i]}
          ((i++))
      else
          ((i++))
      fi
  done

我要做的是:将所有按时间排序的目录列表存储到变量中 - 我假设它是一个数组,但不知何故它的大小是1 ......,然后在while循环,如果目录的位置大于4,则打印出目录名称。

知道如何

2 个答案:

答案 0 :(得分:1)

如果你想要的只是打印除前四个条目以外的所有条目,只需将其输入headsed

#!/bin/sh
OLD=/opt/backup
DIR_PREFIX=active
ls $OLD -t | grep $DIR_PREFIX | sed 1,4d | while read DIR; do
    echo $DIR;
done

如果你只是使用echo,while循环是多余的,但可能你会在循环中有更多的命令。

答案 1 :(得分:0)

OLD=/opt/backup
DIR_PREFIX="active"
DIRS_RESULT=$(ls ${OLD} -t | grep ${DIR_PREFIX})
i=0
for DIR in ${DIRS_RESULT}
    do
        if [ $i -gt 4 ];
        then
            echo ${DIR}
            rm -rf ${DIR}
            ((i++))
        else
            ((i++))
        fi
    done

这个对我有用