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?
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.
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"
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
.
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
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"
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
....