Wildcards
根據副檔名選擇一組文件的語法?
我有以下形式的幾個文件,
組 - 1
file1.n001 file2.n002 file3.n003 file4.n004 : : : filex.nx
組 - 2
file1.ntemp file2.nreal : :etc
為了
.n001 to .nx
使用命令僅刪除帶有副檔名的文件(即第一組中的文件)rm
,有沒有一種方法可以在簡短的 from 中指定所有編號的副檔名(類似於rm *.n001-x
)。而不是rm *.n001 *.n002 *.n003 ..... *.nx
.
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 腳本。
如果
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?
。或者你需要什麼。