Est-il un moyen d'obtenir le chemin / vers / fichier avec ls + awk, sed, grep ou des outils similaires?

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

  •  08-10-2019
  •  | 
  •  

Question

Je voudrais recherche récursive un répertoire, et la sortie:

Nom du fichier Date Taille Path

Je suis tout sauf chemin ... qui est un $$$$ buster ....

Voici ma commande jusqu'à présent:

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

Je souhaite qu'il y ait un moyen de combiner cette commande avec:

find ./{DIRECTORY_NAME_HERE} -type f 

qui montre juste / chemin / vers / nom de fichier lui-même ... aucune autre afaik de métadonnées.

Toutes les idées ... je l'espère sans avoir besoin d'un langage de programmation?

EDIT : Voici la sortie exacte que je cherchais fichier en supposant est de 5 octets:

myfile.txt 2 décembre 10h58 / path 5

UPDATE : Voici la commande que je liquidée avec:

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 quelqu'un peut l'améliorer, ce serait génial, mais cela fonctionne ...

Était-ce utile?

La solution

Avez-vous essayé find ./delete -type f -ls (notez le -ls - qui est la clé :-))? Vous devriez alors être en mesure de tuyau les résultats par awk pour filtrer les champs que vous souhaitez.

Modifier ... Une autre façon, vous pouvez le faire est avec une boucle while, par exemple:.

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

et ajoutez les morceaux dont vous avez besoin dans ce.

Autres conseils

Vous pouvez également utiliser la fonction -printf de trouver pour afficher uniquement les bonnes propriétés d'un fichier que vous voulez:

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

J'obtiens des résultats comme ceci:

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

J'utiliser Perl pour cette tâche:

#!/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);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top