拡張子に基づいてファイルセットを選択する構文は何ですか?

拡張子に基づいてファイルセットを選択する構文は何ですか?

次の形式のファイルが複数あります。

グループ-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

3桁の数字が必要な場合にx使用できます。

rm ./*.n[0-9][0-9][0-9]

これは3桁のサフィックスと一致し、標準シェルで動作する必要があり、テストした限りtcshでも機能します。

zshでは利用可能です

rm ./*.n<1-999>

実際に見ると数字、単純な文字シーケンスではない数値範囲をよりよく制御できます。ただし、先行ゼロを無視するため、たとえば、とも一致しますfoo.n12

もちろん、xtextなら、別々にコマンドラインに追加する必要xがあります。./*.nxまたは./*.n[a-x]。または./*.n?。またはあなたが必要とするもの。

答え2

xがゼロで埋められた3桁の数字(file.n089、file.n678)またはアルファベット(file.na、file.nb、file.nx、file.ny)を表すかどうか。初めてなら本当に簡単です。 bash 4.1.2以降を使用するとします(いつサポートされているのかわかりませんが、4.1.2では機能します)。

rm ./file*.n{001..x} 

For i in {001..x}; do rm file'$i' 0 で埋められた 3 桁の数字で終わるすべてのファイルを削除します。 xを最後の数字に置き換えます。ただし、file2.n003とも一致します。
xがアルファベットを表す場合でも、これを実行してください。

rm ./file*.n{a..x}

編集する:の場合、tcshfile4.n003のような名前とも一致しません。

foreach i ( `seq 1 x` ) 
rm file$i.n`printf "%0yd\n" $i`
end

x を最も高い値に変更し、y を最も高い桁に変更します。 x回と言って少し遅いですrm。ファイル名を文字列に追加し、文字列をrm.tcshスクリプトを1行に書き込む方法もわかりません。

関連情報