
Mi objetivo es conseguir el archivo creado en el mes actual en un directorio.
Parece que el comando es correcto pero no genera ningún resultado:
Date=`date '+%b'`
echo $Date
Oct
ls -l | awk -v d="$Date" '/d/ {print $NF}'
Respuesta1
Deberías usarlo de esta manera:
ls -l | awk -v d="$Date" '$0 ~ d {print $NF}'
La explicación esaquí
Pero tal vez sea mejor usarlo find
en su script.
find . -maxdepth 1 -type f -daystart -ctime -`date "+%d"`
Si tienes clásico awk
en lugar de gawk
:
find * -prune -type f -cmin -`date '+%d %H %M' | awk '{print ($1*24+$2)*60+$3}'`
Respuesta2
El problema aquí es que awk
no hay forma de saber que el d
interior del patrón está destinado a representar la variable de ese nombre: awk
está intentando hacer coincidir un literal d
. Puedes hacer uso de la expansión de parámetros en su lugar:
ls -l | awk "/$Date/ {print \$NF}"
Dicho esto, dos cosas a tener en cuenta:
La hora que aparece en
ls -l
el resultado es la marca de tiempo: la última vez que se modificó el archivo, no se creó. Los tiempos de creación de archivos sonpoco confiable en el mejor de los casosy no disponible en el peor de los casos.Túno debería analizar la salida de ls
Utilice
find
en su lugar, como enla respuesta de dchirikov.