Im essayant de rechercher les fichiers créés en juin, juillet et août. J'ai utilisé cette méthode
ls -lrth|awk '/[Jun][Jul][Aug]/ {print}'
mais ça ne marche pas.
Im essayant de rechercher les fichiers créés en juin, juillet et août. J'ai utilisé cette méthode
ls -lrth|awk '/[Jun][Jul][Aug]/ {print}'
mais ça ne marche pas.
Réponses:
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' print
instruction car c'est l' awk
action par défaut de.
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
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 use of FORMAT
%y time of last modification, human-readable
%n file name
| 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.
find . -newermt '1 June' ! -newermt '1 September' -print
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 find
trouvé avec un fichier fixe. Utilisez touch
pour créer des fichiers temporaires avec la date que vous souhaitez utiliser comme limite.
dir=$(mktemp -d)
touch -d 201306010000 "$dir/from"
touch -d 201309010000 "$dir/to"
find . -newer "$dir/from" ! -newer "$dir/to" -print
rm -r "$dir"
[...]
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.