web-dev-qa-db-fra.com

Comment afficher l'heure de la date modifiée avec la commande 'trouver'?

Avec une commande find, je peux afficher les noms de répertoires à plusieurs niveaux. La commande suivante affiche tous les répertoires sous /var chemin avec une profondeur de 2:

find /var -maxdepth 2 -type d;

Le résultat montre:

/var
/var/log
/var/log/sssd
/var/log/samba
/var/log/audit
/var/log/ConsoleKit
/var/log/gdm
/var/log/sa

Avec une commande stat, je peux trouver la date et l'heure modifiées:

stat /var/log/samba | grep 'Modify:'

Le résultat est:

Modify: 2014-01-02 11:21:27.762346214 -0800 

Est-il possible de combiner les deux commandes pour que les répertoires soient listés avec la date/heure modifiée?

64
Purres

Vous pouvez utiliser le -exec changez pour find et définissez le format de sortie de stat à l'aide du -c commutez comme suit:

find /var -maxdepth 2 -type d -exec stat -c "%n %y" {} \;

Cela devrait donner le nom du fichier suivi de son heure de modification sur la même ligne de la sortie.

53
rc0r

La réponse acceptée fonctionne mais c'est lent. Il n'est pas nécessaire d'exécuter stat pour chaque répertoire, find indique la date de modification et vous pouvez simplement l'imprimer directement. Voici une commande équivalente qui est considérablement plus rapide:

 find /var -maxdepth 2 -type d -printf "%p %TY-%Tm-%Td %TH:%TM:%TS %Tz\n"
103
kzar

find /var -maxdepth 2 -type d | xargs ls -oAHd

C'est un moyen d'obtenir votre commande de base ls pour afficher le chemin d'accès complet au répertoire. Alors que ls possède le paramètre -R Pour la recherche récursive, les chemins ne seront pas affichés dans les résultats avec les options -l Ou -o (Sous OSX, à moins), par exemple avec: ls -lR.

13
Mark

Un autre que j'utilise pour imprimer des fichiers modifiés dans le dernier jour. ls -ltr me donne des informations plus détaillées telles que l'heure de modification, l'utilisateur, etc.

find <my_dir> -mtime -1 -type f -print | xargs ls -ltr 
5
user666

Les versions récentes GNU de find incluent également un -printf option qui inclut les champs de date. Si vous devez imprimer le nom du fichier et l’heure de modification au format standard "C", vous pouvez utiliser -printf "%c %p\n".

Si vous voulez la date dans un format spécifique, vous pouvez utiliser le %C suivi d'un caractère de champ. Par exemple, l'année à 4 chiffres serait %CY, avec Y étant le caractère de l'année à 4 chiffres.
Notez que si vous avez besoin de plusieurs champs, vous devez spécifier %C plusieurs fois. Par exemple, le format AAAA-MM-JJ ressemblerait à %CY-%Cm-%Cd.

Consultez les pages de manuel ou documentation en ligne pour plus de détails.

Voici un exemple de travail:

find . -name favicon.ico -printf "%c %p\n"
4
Mr. Llama

essayez cette ligne:

find /var -maxdepth 2 -type d|xargs stat|grep -E 'File|Modi'

ici je l'ai couru, il sort:

....
  File: ‘/var/cache/cups’
Modify: 2013-12-24 00:42:59.808906421 +0100
  File: ‘/var/log’
Modify: 2014-01-01 12:41:50.622172106 +0100
  File: ‘/var/log/old’
Modify: 2013-05-31 20:40:23.000000000 +0200
  File: ‘/var/log/journal’
Modify: 2013-12-15 18:56:58.319351603 +0100
  File: ‘/var/log/speech-dispatcher’
Modify: 2013-10-27 01:00:08.000000000 +0200
  File: ‘/var/log/cups’
Modify: 2013-12-22 00:49:52.888346088 +0100
  File: ‘/var/opt’
Modify: 2013-05-31 20:40:23.000000000 +0200
....
1
Kent