¿Cómo enumerar todos los archivos en un disco duro con 'buscar'?

¿Cómo enumerar todos los archivos en un disco duro con 'buscar'?

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 findla -printfacció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 findse invoca el comando: al especificar el directorio de trabajo usando $PWD, se vuelve absoluto.

Respuesta2

Puedes usar la -printfopció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 \tcon un espacio si no desea que esté delimitado por tabulaciones. Usando man findpuede encontrar otras opciones de formato para la -printfopción en find.

información relacionada