C'è un modo per ottenere file / percorso / con ls + awk, sed, grep o strumenti analoghi?

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

  •  08-10-2019
  •  | 
  •  

Domanda

mi piacerebbe cercare ricorsivamente una directory, e l'uscita:

Nome file Data Path Size

Ho avuto tutto, ma il percorso ... che è un fenomeno $$$$ ....

Ecco il mio comando finora:

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

Vorrei che ci fosse un modo per combinare quel comando con:

find ./{DIRECTORY_NAME_HERE} -type f 

che solo spettacoli / path / to / filename sé ... senza altri metadati afaik.

Tutte le idee ... si spera senza bisogno di un linguaggio di programmazione?

Modifica : Ecco l'output esatto che cercavo di file assumendo è di 5 byte:

miofile.txt 2 Dicembre 10:58 / percorso 5

Aggiorna : Ecco il comando Finii 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

Se qualcuno può migliorarlo, sarebbe fantastico, ma questo funziona ...

È stato utile?

Soluzione

Hai provato find ./delete -type f -ls (si noti la -ls - questa è la chiave :-))? Si dovrebbe quindi essere in grado di pipe i risultati attraverso awk per filtrare i campi che si desidera.

Modifica ... Un altro modo che si possa fare è con un ciclo while, per esempio:.

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

e aggiungere i bit necessari in quella.

Altri suggerimenti

Si può anche utilizzare la funzione -printf di find per mostrare solo le giuste proprietà di un file che si desidera:

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

ottengo risultati in questo modo:

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

userei Perl per questo compito:

#!/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);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top