如果文件的编号大于X,则如何删除不可预测的文件数

时间:2015-05-05 18:14:26

标签: shell unix

我在目录中有许多文件,编号为file_1.txt,file_2.txt,file_3.txt等。我想删除上面带有数字的任何文件,例如5(所以删除file_6.txt,file_7.txt等)。我不知道每个目录中有多少这些文件,或者甚至有那么多文件。这些数字与上次访问文件的最近时间不对应。

在以前的情况下,当按顺序创建文件并且我知道需要删除多少文件时,我已经使用了这个命令,但是我无法弄清楚如何使它适应未知:

ls -t | tail -n5 | xargs --no-run-if-empty rm

1 个答案:

答案 0 :(得分:2)

由于您将问题标记为shell而不是bash,我试图避免使用bash-isms并使用最小公分母sh语法。我相信这就是你所要求的:

#!/bin/sh

for file in *
do
    num=`echo $file | sed 's/file_\([0-9][0-9]*\)\.txt/\1/'`
    if [ "$num" -gt 5 ]
    then
      echo Removing $file
      # Uncomment when confident results are correct
      # rm $file
    fi
done 

我认为许多系统上的非Gnu sed不支持+运算符,因此需要[0-9][0-9]*来确保至少一位数。