¿Hay una manera de conseguir / fichero de camino a / con ls + awk, sed, grep o herramientas similares?

StackOverflow https://stackoverflow.com/questions/4351096

  •  08-10-2019
  •  | 
  •  

Pregunta

Me gustaría buscar recursivamente un directorio, y la salida:

Nombre Fecha Path tamaño

Tengo todo pero Path ... que es un destructor $$$$ ....

Aquí está mi mando hasta el momento:

ls -lThR {DIRECTORY_NAME_HERE} | awk '/^-/ {print $10 " " $6 " " $7 " " $8 " " $5}'

Me gustaría que hubiera una manera de combinar con ese comando:

find ./{DIRECTORY_NAME_HERE} -type f 

lo que demuestra / ruta / a / nombre del archivo en sí ... que yo sepa ningún otro metadatos.

¿Alguna idea ... es de esperar sin necesidad de un lenguaje de programación?

Editar : Aquí está la salida exacta que estaba buscando el archivo suponiendo que se 5 bytes:

miarchivo.txt Dec 2 10:58 / ruta 5

Actualizar : Aquí está el comando terminé con:

find ./{DIRECTORY_NAME_HERE} -type f -ls | 
while read f1 blocks perms blocks owner group size mon day third file; 
do echo `basename $file` `ls -lrt $file | tr -s " " | cut -d" " -f6-8` `dirname $file` `ls -lrt $file | tr -s " " | cut -d" " -f-5`; done

Si alguien puede mejorarla, eso sería genial, pero esto funciona ...

¿Fue útil?

Solución

¿Has probado find ./delete -type f -ls (nótese el -ls - esa es la clave :-))? A continuación, debería ser capaz de canalizar los resultados a través de awk para filtrar los campos que desee.

Editar ... Otra forma en que podría hacerlo es con un bucle while, por ejemplo:.

find ./delete -type f -ls | while read f1 blocks perms blocks owner group size mon day third file
do
    echo `basename $file` `dirname $file`
done

y añadir los bits que necesita en eso.

Otros consejos

También puede utilizar la función de -printf del hallazgo para mostrar sólo las propiedades adecuadas de un archivo que desea:

find {DIRECTORY_NAME_HERE} -type f -printf  '%f %Tb %Td %TH:%TM %h %s\n'

consigo resultados como esto:

config Nov 10 10:02 /etc/w3m 1185
mailcap Nov 10 10:02 /etc/w3m 44
hosts.allow Apr 29 05:25 /etc 580
rsyslog.conf Feb 24 10:26 /etc 1217
user-dirs.conf Apr 16 15:03 /etc/xdg 414
user-dirs.defaults Apr 16 15:03 /etc/xdg 418

Me haría uso de Perl para esta tarea:

#!/opt/local/bin/perl -w

use File::Find;
use POSIX qw(strftime);

find(\&wanted, ($DIRECTORY_NAME_HERE));
sub wanted {
  ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime) = stat;
  printf("%s %s %s %d\n", $_, 
    strftime("%b %e %H:%M %Y", localtime($mtime)),
    $File::Find::dir,
    $size);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top