2014-09-15 2 views
1

Je suis en train de nourrir mon script perl plusieurs fichiers par semaine civile. Il faut simplement tous les fichiers qu'il reçoit de la bash:Globbing certaines dates AAAAMMJJ

foreach my $input (@ARGV){ 
    ... 
} 

La convention d'appellation se présente comme suit:

FILE_XYZ_20140908_0000.000XYZ 

Pour la première semaine du mois, il n'y a pas de problème ..

FILE_XYZ_2014090[1-7]_* 

.. correspondra très bien. Il devient difficile lorsque le jour passe de 09 à 10.
Y a-t-il un motif qui correspondra à tous les fichiers de 201409 à 201409 ?

Répondre

3

Je ne suis pas sûr d'anciennes versions de Bash, mais dans le mien (4.1.11 (2))

echo 9{08..14} 

retours

908 909 910 911 912 913 914 

Dans les anciennes versions, vous devez utiliser un expression plus complexe (testé en 3.00.15 (1)):

echo 9{0{8..9},1{0..4}} 
+0

Le deuxième a travaillé pour moi. (3.00.16 (1)) Merci beaucoup! – hcrudolph

0

Si vous activez le support de modèle étendu avec

shopt -s extglob 

vous pouvez spécifier les motifs suivants:

[email protected](01|02|03|04|05|06|07)_* 
[email protected](08|09|10|11|12|13|14)_* 
[email protected](15|16|17|18|19|20|21)_* 
[email protected](22|23|24|25|26|27|28)_* 

modèles ne sont pas vraiment bien avec les gammes, ce qui est la raison pour laquelle vous avez besoin de les écrire explicitement.

+0

chep, êtes-vous en expansion pour plus de lisibilité? Pourquoi ne pas simplement utiliser '0 [1-7] _ *', '@ (0 [8-9] | 1 [0-4]) _ *', etc? – ghoti

+0

Oui, lisibilité. Le modèle réduit pour la plage 8-14, par exemple, est plus court de 7 caractères et nettement moins clair. – chepner

Questions connexes