我在目录中有许多文件,编号为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
答案 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]*
来确保至少一位数。