2011-08-06 22 views

Respuesta

9

Usted puede utilizar stat(1) para obtener la información que desea, si no desea que el ls -l salida completa, y se puede utilizar para find(1) obtener una lista de directorio recursivo. Combinarlas en una sola línea, usted puede hacer esto:

# Find all regular files under the current directory and print out their 
# filenames, sizes, and last modified times 
find . -type f -exec stat -f '%N %z %Sm' '{}' + 

Si desea hacer la salida más analizable, se puede utilizar en lugar de %m%Sm para obtener la última vez modificado como time_t en lugar de como un hombre- fecha legible

5

find es perfecto para buscar recursivamente a través de directorios. La acción -ls dice que a la salida de sus resultados en ls -l formato:

find /dir/ -ls 

en máquinas Linux puede imprimir de salida personalizado utilizando la -printf acción:

find /dir/ -printf '%p\t%s\t%t\n' 

Ver man find para más detalles sobre los especificadores de formato disponibles con -printf. (Esto no es POSIX-compatible y puede no estar disponible en otras versiones de UNIX.)

+1

El primario '-printf' no es POSIX; algunas implementaciones 'find' (en particular, la de Mac OS X) no lo incluyen. –

2

find * -type f -printf '%p\t%s\t%TY-%Tm-%Td %Tk:%TM\n'

Si prefiere campos de ancho fijo en lugar de pestañas, se pueden hacer cosas como cambiar a %s%10s.

Utilicé find * ... para evitar el "./" inicial en cada nombre de archivo. Si no le molesta, use . en lugar de * (que también muestra archivos cuyos nombres comienzan con .). También puede canalizar la salida a través de sed 's/^\.\///'.

Tenga en cuenta que el orden de salida será arbitrario. Pase por sort si desea un listado ordenado.

+0

El primario '-printf' no es POSIX; algunas implementaciones 'find' (en particular, la de Mac OS X) no lo incluyen. –

+0

@ Adam: Buen punto. (Por supuesto, puede instalar findutils de GNU en MacOS, pero eso puede no ser práctico o vale la pena el esfuerzo). –

1

Usted podría intentar esto para el listado recursivo de la carpeta actual se llama "/ from_dir"

find /from_dir/* -print0 | xargs -0 stat -c “%n|%A|%a|%U|%G” > permissions_list.txt
 

muestra los archivos y directorios pasa a través de stat mando y pone toda la información en un archivo llamado permissions_list.txt

“% n |% a |% a |% T |% G” le dará el siguiente resultado en el archivo:

from_
 dir|drwxr-sr-x|2755|root|root
  
from_dir/filename|-rw-r–r–|644|root|root 

Salud!

Cuestiones relacionadas