Estoy intentando buscar los archivos creados en los meses de junio, julio y agosto. utilicé este método
ls -lrth|awk '/[Jun][Jul][Aug]/ {print}'
pero no funciona.
Respuesta1
Puedes combinar varios patrones como este:
awk '/Jun/ || /July/ || /Aug/' <(ls -lrh)
Esto devuelve todas las coincidencias de junio, julio o agosto. No es necesaria la print
declaración ya que esa es awk
la acción predeterminada.
Respuesta2
Como regla general, es una muy mala ideaanalizar la salida de ls. Una mejor manera de hacer lo que quieres es
stat -c "%n %y" * | grep 2013-0[678]
Alternativamente, marque solo el último campo para protegerse contra el improbable caso de que el nombre del archivo en sí sea una fecha:
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
Respuesta3
ls
es un comando para mostrar información sobre archivos en un formato legible por humanos.No lo utilices en guiones..
El comando para buscar archivos en un árbol de directorios que coincidan con ciertos criterios esfind
. Si tiene una búsqueda GNU (es decir, Linux o Cygwin no integrado) o una búsqueda FreeBSD (es decir, FreeBSD u OSX), puede utilizarla -newermt
para buscar archivos que se modificaron por última vez después de una fecha determinada.
find . -newermt '1 June' ! -newermt '1 September' -print
Agregue un año si desea hacer coincidir archivos de un año específico, en lugar del año calendario en el que se ejecuta el script.
Si su implementación de búsqueda no tiene -newermt
, tendrá que conformarse con -newer
, que compara la fecha del archivo find
encontrado con un archivo fijo. Úselo touch
para crear archivos temporales con la fecha que desea usar como límite.
dir=$(mktemp -d)
touch -d 201306010000 "$dir/from"
touch -d 201309010000 "$dir/to"
find . -newer "$dir/from" ! -newer "$dir/to" -print
rm -r "$dir"