ファイルをグローバルに一緒にリンクすることは可能ですか?

ファイルをグローバルに一緒にリンクすることは可能ですか?

保存名が10{1..40}0.txtの一連のファイルがあります。10.txt400.txt

➜ ls
10.txt  60.txt   110.txt  160.txt  210.txt  260.txt  310.txt  360.txt
20.txt  70.txt   120.txt  170.txt  220.txt  270.txt  320.txt  370.txt
30.txt  80.txt   130.txt  180.txt  230.txt  280.txt  330.txt  380.txt
40.txt  90.txt   140.txt  190.txt  240.txt  290.txt  340.txt  390.txt
50.txt  100.txt  150.txt  200.txt  250.txt  300.txt  350.txt  400.txt

100から300の間ですが、100に分割できないすべてのファイルを削除したいと思います。今すぐ。離れる{1..9}0.txt, 100.txt, 200.txt, 3{1..9}0.txt:

rm 110.txt  130.txt  150.txt  170.txt  190.txt  220.txt  240.txt  260.txt  280.txt
   120.txt  140.txt  160.txt  180.txt  210.txt  230.txt  250.txt  270.txt  290.txt

zshでは、100から300までのファイルをglobでき、オプションセットを使用して<100-300>.txt100に分割できるファイルをglobできます。^(*00).txtextendedglob

ファイルグローバルパターンを順番にリンクできますか?したがって、100〜300個のファイルをglobしてから、残りのファイルをglobして00

単一のglob内でこれを行う方法は除外が提供される<100-300>.txt~(*00).txt場所です~(参照zsh ドキュメント)。編集:グローバルゴルフをプレイすると、次のように単純化できます<10-30>0*~*00*

ベストアンサー1

$ touch {10..400..10}.txt
$ print -rC1 -- <100-300>.txt(e['(( $REPLY:r % 100 != 0 ))'])
110.txt
120.txt
130.txt
140.txt
150.txt
160.txt
170.txt
180.txt
190.txt
210.txt
220.txt
230.txt
240.txt
250.txt
260.txt
270.txt
280.txt
290.txt

上記の内容でtouchファイルが生成されます。

次の行のビットは、<100-300>.txt100から300の数字で始まるファイルを選択します。

glob修飾子は、100で割り切れない(e['(( $REPLY:r % 100 != 0 ))'])「root」(拡張子のない名前、via経由の名前)ファイル名を選択します。:r


もちろん、glob修飾子でもこれを行うことができます。

*.txt(e['(( r=$REPLY:r, r >= 100 && r <= 300 && r % 100 != 0 ))'])

おすすめ記事