Linux 用于删除文件的shell脚本,其中文件具有序列号

Linux 用于删除文件的shell脚本,其中文件具有序列号,linux,shell,Linux,Shell,我需要一个用于删除文件的shell脚本,其中文件具有序列号 例如,有一个类似于/abc/def的目录,其中包含以下文件: xyz_1000_1_pqr.arc xyz_1001_1_pqr.arc xyz_1002_1_pqr.arc xyz_1003_1_pqr.arc xyz_1004_1_pqr.arc xyz_1005_1_pqr.arc xyz_1006_1_pqr.arc xyz_1007_1_pqr.arc xyz_1008_1_pqr.arc 这里我需要删除所有序列号小于(单向

我需要一个用于删除文件的shell脚本,其中文件具有序列号

例如,有一个类似于
/abc/def
的目录,其中包含以下文件:

xyz_1000_1_pqr.arc
xyz_1001_1_pqr.arc
xyz_1002_1_pqr.arc
xyz_1003_1_pqr.arc
xyz_1004_1_pqr.arc
xyz_1005_1_pqr.arc
xyz_1006_1_pqr.arc
xyz_1007_1_pqr.arc
xyz_1008_1_pqr.arc
这里我需要删除所有序列号小于(单向)的
.arc
文件

rm xyz_100{0..3}_1_pqr.arc
如果您有开始和结束序列号,那么只需循环并删除它们

for (( i=$start_num ; i<=$end_num; i++ ))
do
   rm xyz_${i}_*arc
done

for((i=$start_num;i此脚本以您在命令行上指定的数字开始,并删除所有具有该数字或更低数字的文件,直到该文件不存在的数字为止

#!/bin/sh
num=$1

for ((i=$num; i>=0; i--))
do
    name=$(printf 'xyz_%03i_1_pqr.arc' $i)
    [ -f "$name" ] || break
    rm "$name"
done
printf语句中的“%03i”格式确保数字一旦格式化,将是三位数或更长。(这意味着像99这样的数字用零填充,变成099。)对于printf,“%i”表示格式化一个整数,“%3i”表示格式化一个整数,并至少给它三个空格,以及“%03i”表示将整数格式化为三个空格,根据需要用零填充


在这个答案的早期版本中,我让脚本将所有数字检查到零,以查找要删除的文件。在注释中,您提到序列号可能最多为7位。这可能会使穷举法过于耗时。在这个版本中,我让脚本倒计时,直到它达到一个序列号,该序列号的背面up已经被删除,它就停在那里。

我不知道您的需求中有哪些部分是固定的,哪些部分是示例。(您不可能只是问如何在shell脚本中删除这四个文件?)要求:删除已备份的文件并防止文件系统达到100%,备份团队提供已备份的最新文件的序列号
rm xyz_100[0-3]_1_pqr.arc
谢谢,但很抱歉,我的问题到目前为止还不清楚。我正在使用你建议的常规表达式手动删除文件,但现在我正在寻找一个脚本,可以调用该脚本来执行相同的操作,只需传递最新应用的序列号anks,但很抱歉,到目前为止我的问题还不清楚我正在使用您建议的常规表达式手动删除文件,但现在我正在寻找一个可以调用以执行相同操作的脚本。将不知道起始序列号04在%04中代表什么用于应答,这是生产服务器arch_RMSPRD_2_904_799171838.arc中的示例文件名r 904是seqnumber如果序列号可以是3-7位数字中的任何数字,我应该如何修改代码
#!/bin/sh
num=$1

for ((i=$num; i>=0; i--))
do
    name=$(printf 'xyz_%03i_1_pqr.arc' $i)
    [ -f "$name" ] || break
    rm "$name"
done