Wildcards

根據副檔名選擇一組文件的語法?

  • August 19, 2021

我有以下形式的幾個文件,

組 - 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 更改為最高位數。它呼叫rmx 次時有點慢。通過在字元串中附加文件名並將字元串傳遞給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?。或者你需要什麼。

引用自:https://unix.stackexchange.com/questions/665289