1から500までのような名前とサフィックスを持つファイルがたくさんあります。 1~250個のファイルのみ削除したいです。ワイルドカードを使用してこれを行う方法はありますか?
ファイルは次のとおりです。stdout.1〜stdout.500
stdout.1からstdout.250までファイルを削除したいです。
ありがとう
ベストアンサー1
Zshでは、10進整数を表すファイル名部分にrm stdout.<1-250>
.matchを実行できます。<n-m>
N到着米。 (前に0がある可能性があるのでこれもstdout.0099
一致します。)
Bashでは中括弧拡張を使用できますrm stdout.{1..250}
。しかし、Zshとの違いは、中<1-250>
かっこ拡張が既存のファイルに関係なく文字列を生成するため、リストの途中にファイルがないとエラーが発生する可能性があることです。の場合、rm
このオプションを追加するとこれらのエラーが削除されます。これは、リンク解除を要求したファイルが戻ってもまだ存在する場合にのみエラーが発生する-f
ためです。-f
rm
存在しないファイルの名前の生成を回避したり、標準sh
(中括弧拡張なし)に制限したりするには、文字ごとに一致する必要があります。だから:
rm stdout.? stdout.?? # 1 to 99
rm stdout.1?? # 100 to 199
rm stdout.2[01234]? # 200 to 249
rm stdout.250 # 250
ただし、一致するファイルがない場合は、呼び出されたファイルが存在する場合はrm stdout.2[01234]?
最終的に削除されます。stdout.2[1234]?