我有几个以下形式的文件,
组 - 1
file1.n001
file2.n002
file3.n003
file4.n004
:
:
:
filex.nx
组 - 2
file1.ntemp
file2.nreal
:
:etc
为了.n001 to .nx
使用命令仅删除具有扩展名的文件(即第一组中的文件)rm
,是否有一种方法可以在简短的形式中指定所有编号的扩展名(类似于rm *.n001-x
)。代替rm *.n001 *.n002 *.n003 ..... *.nx
。
答案1
如果x
应该是一些三位数,你可以使用
rm ./*.n[0-9][0-9][0-9]
这将匹配任何三位数后缀,并且应该在标准 shell 中工作,并且据我测试,也可以在 tcsh 中工作。
在 zsh 中,你可以使用
rm ./*.n<1-999>
它实际上着眼于数字,而不仅仅是字符序列,因此可以更好地控制数字范围。但请注意,它忽略前导零,因此也将匹配例如foo.n12
。
当然,如果x
是文字x
,那么您必须./*.nx
单独添加到命令行。或者./*.n[a-x]
。或者./*.n?
。或者无论你需要什么。
答案2
x 是否表示零填充的三位数数字(file.n089、file.n678)或字母表(file.na、file.nb、file.nx、file.ny)。如果是第一个,那就超级简单了。假设您使用的是 bash 4.1.2 或更高版本(我不知道从什么时候开始支持它,但它可以在 4.1.2 中使用)。
rm ./file*.n{001..x}
对于 {001..x} 中的 i; do rm file'$i' 它将删除所有以零填充的三位数结尾的文件。将 x 替换为最后一个数字。但它也匹配 file2.n003。
如果 x 表示字母表,那么也执行此操作
rm ./file*.n{a..x}
编辑: 对于tcsh
,它也不匹配 file4.n003 这样的名称
foreach i ( `seq 1 x` )
rm file$i.n`printf "%0yd\n" $i`
end
将 x 更改为最高值,将 y 更改为最高位数。速度有点慢,因为它调用了rm
x 次。通过将文件名附加到字符串中并将字符串传递到rm
.我也不知道如何在一行中编写 tcsh 脚本。