
tengo un directorio en
Mi DIR principal es/tmp/folder
En el interior /tmp/folder
hay solo un número X de carpetas (no archivos). Por ejemplo
/tmp/folder/1
/tmp/folder/2
/tmp/folder/3
/tmp/folder/4
/tmp/folder/5
Dentro de estas carpetas hay muchos archivos de la misma extensión. Quiero de cada una de estas carpetas obtener los últimos y primeros archivos creados (hora de modificación).
La salida prefiero que sea así.
/tmp/folder/1,OLD_FILE,NEW_FILE
/tmp/folder/2,OLD_FILE,NEW_FILE
/tmp/folder/3,OLD_FILE,NEW_FILE
/tmp/folder/4,OLD_FILE,NEW_FILE
/tmp/folder/5,OLD_FILE,NEW_FILE
Analizaré este resultado usando un script, para que pueda generar el resultado que desee, pero hágalo de manera amigable para que pueda analizarlo fácilmente.
El comando bash debe ser solo 1
Respuesta1
find "$DIR" -type d | while read d; do echo "$d,$(ls -t "$d" | sed -n '1h; $ { G; s/\n/,/g; p }')"; done
O, en un formato más legible y usando una variable adicional para demostración:
find "$DIR" -type d |
while read d;
do
files=$(ls -t "$d" | sed -n '1h; $ { G; s/\n/,/g; p }')
printf '%s,%s\n' "$d" "$files";
done
Esto encuentra todos los subdirectorios donde $DIR
se utiliza el find
comando. Para cada uno encontrado, se utiliza ls -tr
para obtener una lista de archivos en ese directorio ordenados por fecha, el más nuevo primero.
Canalice la salida de ls -tr
para sed
unir la primera y la última línea con una coma: la opción -n
suprime la salida predeterminada, 1h
guarda la primera línea (el nombre de archivo más nuevo) en elmantener espacio, y en la última línea del archivo (seleccionado por $
) agrega el espacio de retención (nombre de archivo más nuevo) al H
espacio del patrón (delimitado por una nueva línea) y cambia esa nueva línea a una coma.
Luego, el script printf
muestra el nombre del subdirectorio seguido de una coma, seguido de los archivos que salieron de sed
.
Esto no hace distinción entre directorios y archivos para la selección más antigua/más nueva, por lo que si no desea directorios allí, deberá filtrar la salida ls -t
para eliminar los directorios.