Me gustaría enumerar todos los archivos en el disco duro, incluido el tamaño, la fecha de la última modificación y la ruta absoluta.
formato de idea:
[file size] [last modified date] [absolute path] [ filename]
Lo intenté:
ls -lhR | awk -v PWD=$PWD '{printf("%4s %4s %2s %5s %s/%s\n", $5, $6, $7, $8, PWD, $9); }' >> /tmp/report.list
Funcionó perfectamente hasta que llegó a algunos archivos/directorios con espacio en el medio... Así que intenté:
find . -name "*" -exec du -sh {} \; -exec date -r {} \; -exec echo " " \; >> /tmp/report.list
Pero el resultado parece estar distribuido en 3 líneas en lugar de 2, además la ruta impresa no es la ruta absoluta al archivo.
¿Qué tengo que hacer?
Respuesta1
Puede utilizar find
la -printf
acción para generar esos atributos directamente, por ejemplo
find "$PWD" -printf '%s\t%Tx\t%h\t%P\n'
%s
: Tamaño del archivo en bytes.%Tx
: Hora de la última modificación del archivo, en la representación de fecha local%h
: Directorios principales del nombre del archivo.%P
: Nombre del archivo con el nombre del argumento de la línea de comando bajo el cual se encontró eliminado.
La ruta del directorio ( %h
) se imprime en relación con el argumento de la ruta de la línea de comandos con el que find
se invoca el comando: al especificar el directorio de trabajo usando $PWD
, se vuelve absoluto.
Respuesta2
Puedes usar la -printf
opción en buscar:
find / -type "f" -printf "%s\t%TY-%Tm-%Td\t%p\n" > file.txt
Esto crea un archivo con formato:
[tamaño en bytes]TAB[Última fecha de modificación en formato AAAA-mm-dd]TAB[FULLPATH]
Se ejecutará en la estructura de archivos completa.
Reemplace cada uno \t
con un espacio si no desea que esté delimitado por tabulaciones. Usando man find
puede encontrar otras opciones de formato para la -printf
opción en find
.