Pour mémoire, la [...]construction correspond à un seul caractère, qui peut être n'importe lequel des caractères entre les crochets. Ainsi, votre expression correspond à JJA ou Jug( Jde [Jun], ude [Jul]et gde [Aug]) mais pas aux abréviations de mois que vous espériez faire correspondre.
tripleee
Réponses:
12
Vous pouvez faire correspondre plusieurs modèles comme ceci:
awk '/Jun/ || /July/ || /Aug/'<(ls -lrh)
Cela renvoie toutes les correspondances pour juin, juillet ou août. Vous n'avez pas besoin de l' printinstruction car c'est l' awkaction par défaut de.
awk comprend les expressions rationnelles étendues, donc pour un modèle aussi simple que cela, vous pouvez l'écrire comme awk '/Jun|Jul|Aug/'ouawk '/Ju[nl]|Aug/'
cas
5
En règle générale, c'est une très mauvaise idée d' analyser la sortie de ls . Une meilleure façon de faire ce que vous voulez est
stat -c "%n %y"*| grep 2013-0[678]
Sinon, cochez uniquement le dernier champ pour vous protéger contre le cas peu probable où le nom de fichier lui-même est une date:
stat -c "%n %y"*| awk '$NF ~ /2013-0[678]/'
De man stat:
-c --format=FORMAT
use the specified FORMAT instead of the default; output a new‐
line after each useof FORMAT
%y time oflast modification, human-readable
%n file name
C'est aussi un bon exemple. Je n'ai jamais vérifié STAT auparavant. merci pour la grande info
OmiPenguin
Peut-être changer en ... | awk '$NF ~ /2013-0[678]/'pour vérifier uniquement le dernier champ de sortie, dans le (peu probable?) Même si le nom d' un fichier correspond à l'expression régulière même lorsque la date ne le fait pas.
tripleee
3
lsest une commande pour afficher des informations sur les fichiers dans un format lisible par l'homme. Ne l'utilisez pas dans les scripts .
La commande pour rechercher des fichiers dans une arborescence de répertoires correspondant à certains critères est find. Si vous avez une recherche GNU (c.-à-d. Linux non intégré ou Cygwin) ou une recherche FreeBSD (c.-à-d. FreeBSD ou OSX), vous pouvez utiliser -newermtpour faire correspondre les fichiers qui ont été modifiés pour la dernière fois après une certaine date.
Ajoutez une année si vous souhaitez faire correspondre les fichiers d'une année spécifique, plutôt que l'année civile lorsque le script s'exécute.
Si votre implémentation find n'a pas -newermt, vous devrez vous contenter de -newer, qui compare la date du fichier findtrouvé avec un fichier fixe. Utilisez touchpour créer des fichiers temporaires avec la date que vous souhaitez utiliser comme limite.
[...]
construction correspond à un seul caractère, qui peut être n'importe lequel des caractères entre les crochets. Ainsi, votre expression correspond àJJA
ouJug
(J
de[Jun]
,u
de[Jul]
etg
de[Aug]
) mais pas aux abréviations de mois que vous espériez faire correspondre.Réponses:
Vous pouvez faire correspondre plusieurs modèles comme ceci:
Cela renvoie toutes les correspondances pour juin, juillet ou août. Vous n'avez pas besoin de l'
print
instruction car c'est l'awk
action par défaut de.la source
awk '/Jun|Jul|Aug/'
ouawk '/Ju[nl]|Aug/'
En règle générale, c'est une très mauvaise idée d' analyser la sortie de ls . Une meilleure façon de faire ce que vous voulez est
Sinon, cochez uniquement le dernier champ pour vous protéger contre le cas peu probable où le nom de fichier lui-même est une date:
De
man stat
:la source
| awk '$NF ~ /2013-0[678]/'
pour vérifier uniquement le dernier champ de sortie, dans le (peu probable?) Même si le nom d' un fichier correspond à l'expression régulière même lorsque la date ne le fait pas.ls
est une commande pour afficher des informations sur les fichiers dans un format lisible par l'homme. Ne l'utilisez pas dans les scripts .La commande pour rechercher des fichiers dans une arborescence de répertoires correspondant à certains critères est
find
. Si vous avez une recherche GNU (c.-à-d. Linux non intégré ou Cygwin) ou une recherche FreeBSD (c.-à-d. FreeBSD ou OSX), vous pouvez utiliser-newermt
pour faire correspondre les fichiers qui ont été modifiés pour la dernière fois après une certaine date.Ajoutez une année si vous souhaitez faire correspondre les fichiers d'une année spécifique, plutôt que l'année civile lorsque le script s'exécute.
Si votre implémentation find n'a pas
-newermt
, vous devrez vous contenter de-newer
, qui compare la date du fichierfind
trouvé avec un fichier fixe. Utiliseztouch
pour créer des fichiers temporaires avec la date que vous souhaitez utiliser comme limite.la source