Estoy tratando de 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 está funcionando.
Estoy tratando de 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 está funcionando.
Respuestas:
Puede coincidir en múltiples patrones de esta manera:
awk '/Jun/ || /July/ || /Aug/' <(ls -lrh)
Esto devuelve todas las coincidencias para junio, julio o agosto. No necesita la print
declaración, ya que es awk
la acción predeterminada.
awk '/Jun|Jul|Aug/'
oawk '/Ju[nl]|Aug/'
Como regla general, es una muy mala idea analizar la salida de ls . Una mejor manera de hacer lo que quieres es
stat -c "%n %y" * | grep 2013-0[678]
Alternativamente, verifique solo el último campo para protegerse contra el caso improbable de que el nombre del archivo 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
| awk '$NF ~ /2013-0[678]/'
para verificar solo el último campo de salida, en el (¿improbable?) Incluso que el nombre de un archivo coincida con la expresión regular, incluso cuando la fecha no lo hace.
ls
es un comando para mostrar información sobre archivos en forma legible por humanos. No lo use en scripts .
El comando para buscar archivos en un árbol de directorios que coincida con ciertos criterios es find
. Si tiene GNU find (es decir, Linux o Cygwin no incrustado) o FreeBSD find (es decir, FreeBSD u OSX), puede usar -newermt
para hacer coincidir los 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 los archivos en un año específico, en lugar del año calendario cuando se ejecuta el script.
Si su implementación de búsqueda no tiene -newermt
, tendrá que arreglárselas con -newer
, que compara la fecha del archivo que se find
encontró con un archivo fijo. use 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"
[...]
construcción coincide con un solo carácter, que puede ser cualquiera de los caracteres entre paréntesis. Por lo tanto, su expresión coincideJJA
oJug
(J
desde[Jun]
,u
desde[Jul]
yg
desde[Aug]
) pero no las abreviaciones de mes que esperaba hacer coincidir.