i目录中有许多文件,这些文件编号为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
由于您将问题标记为外壳,而不是bash,所以我试图避免使用狂欢,并使用最低的公共分母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]*
以确保至少一位数字。