web-dev-qa-db-fra.com

Liste tous les fichiers (avec les chemins d'accès complets) dans un répertoire (et sous-répertoires), classés par temps d'accès

Je voudrais construire une commande Linux pour répertorier tous les fichiers (avec leurs chemins d'accès complets) dans un répertoire spécifique (et sous-répertoires) classés par temps d'accès.

ls peut commander par temps d'accès, mais ne donne pas le chemin complet. find donne le chemin complet, mais le seul contrôle que vous avez sur le temps d'accès est de spécifier une plage avec -atime N (consulté il y a au moins 24 * N heures), ce qui n'est pas ce que je veux.

Existe-t-il un moyen de commander par temps d'accès et d'obtenir le chemin complet en une fois? Je pourrais simplement écrire un script, mais il semble qu'il devrait y avoir un moyen de le faire avec les programmes Linux standard.

21
Andrew
find . -type f -exec ls -l {} \; 2> /dev/null | sort -t' ' -k +6,6 -k +7,7

Cela trouvera tous les fichiers et les triera par date, puis par heure. Vous pouvez ensuite utiliser awk ou cut pour extraire les dates et le nom des fichiers du ls -l production

20
Alex

tu pourrais essayer:

 ls -l $(find /foo/bar -type f )
  • vous pouvez ajouter d'autres options (par exemple, -t pour le tri) à la commande ls pour atteindre votre objectif.
  • vous pouvez également ajouter vos critères de recherche à find cmd
11
Kent

find . -type f | xargs ls -ldt devrait faire l'affaire tant qu'il n'y a pas autant de fichiers que vous frappez la commande comme limite d'argument et générez 2 instances de ls.

3
Daenyth
pwd | xargs -I % find % -type f
2
ericj
find . -type f -exec ls -l --full-time {} \; 2> /dev/null | sort -t' ' -k +6,6 -k +7,7

La réponse d'Alex n'a pas fonctionné pour moi car j'avais des fichiers de plus d'un an et le tri a été foiré. Ce qui précède ajoute le paramètre --full-time qui nuétalise les valeurs de date/heure et les rend triables quel que soit leur âge.

1
Ron