次の形式のファイルが複数あります。
グループ-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
。
もちろん、x
textなら、別々にコマンドラインに追加する必要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}
編集する:の場合、tcsh
file4.n003のような名前とも一致しません。
foreach i ( `seq 1 x` )
rm file$i.n`printf "%0yd\n" $i`
end
x を最も高い値に変更し、y を最も高い桁に変更します。 x回と言って少し遅いですrm
。ファイル名を文字列に追加し、文字列をrm
.tcshスクリプトを1行に書き込む方法もわかりません。