J'essaie 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 cela ne fonctionne pas.
Vous pouvez correspondre à plusieurs modèles comme:
awk '/Jun/ || /July/ || /Aug/' <(ls -lrh)
Cela renvoie tous les matchs pour Jun, juillet ou août, vous n'avez pas besoin de l'instruction print
comme c'est awk
's Action par défaut.
En règle générale, c'est une très mauvaise idée de analyser la sortie de LS . Une meilleure façon de faire ce que vous voulez est
stat -c "%n %y" * | grep 2013-0[678]
Alternativement, cochez uniquement le dernier champ à protéger contre le cas improbable où le nom du 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
ls
est une commande pour afficher des informations sur les fichiers d'un humain lisible. Ne l'utilisez pas dans les scripts .
La commande de trouver des fichiers dans une arborescence de répertoire correspondant à certains critères est find
. Si vous avez GNU Trouver (c'est-à-dire Linux non incorporé Linux ou Cygwin) ou FreeBSD Trouver (c'est-à-dire FreeBSD ou OSX), vous pouvez utiliser -newermt
Pour correspondre aux fichiers de dernière modification après une certaine date.
find . -newermt '1 June' ! -newermt '1 September' -print
Ajouter une année si vous souhaitez faire correspondre des fichiers d'une année spécifique, plutôt que l'année civile lorsque le script est exécuté.
Si votre implémentation de recherche n'a pas -newermt
, vous devrez faire avec -newer
, qui compare la date du fichier que find
trouvé avec un fichier fixe. Utilisez touch
pour créer des fichiers temporaires avec la date à laquelle 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"