“trouvez-ls” avec un bon temps de style
- je utiliser la commande suivante pour générer une liste de fichiers dont je compare parfois pour voir si quelque chose est changé:
find /directory -xdev -ls
Mon Problème est que le temps de la sortie n'est pas toujours dans le même format:
Sep 19 08:48 ./pool/f/f/0/ff046cc5b7188073cbd68207c52bddc5
Nov 2 06:24 ./pool/f/f/0/ff0e803c36d89315a6b3663ed1295f71
Jan 18 2012 ./pool/f/f/0/ff07f60465d8deb7a1aa38096d0b798d
Jan 18 2012 ./pool/f/f/0/ff07436f519bddf1d340afde5a240375
Pour le ls-commande il y a l'option --temps-format=long de l'iso pour forcer le même temps-format pour tous les fichiers.
Est-il possible de combiner cela avec la commande?
Grâce
OriginalL'auteur Denno | 2014-01-07
Vous devez vous connecter pour publier un commentaire.
Il n'y a rien dans ma page de manuel sur la modification du format de la
-ls
paramètre. En fait, sur mon système, la sortie de-ls
n'est pas influencée par différentes variables d'environnement qui affectent la sortie de lals
commande elle-même. Je suppose que le format de la-ls
paramètre est interne àfind
et ne pas impliquer l'ls
de commande. Pour moi, cela rend la programmation de sens. Pourquoi exécuter une commande externe? Juste simuler l'affichage.La seule façon que je peux penser de contourner ce problème est d'utiliser
-exec
ou-print0
à transmettre les résultats à la réalité dels
de commande. Un peu de mise en garde: Si vous passez le nom du répertoire,ls
permettra d'imprimer le contenu de ce répertoire, de sorte que vous aurez besoin de passer des-d
à lals
de commande ou ajouter-type f
dans votrefind
requête. J'ai vérifié la page de manuel pour trouver sur Linux, et a constaté que c'est supposé être la même sortie que -dils, so I used that. Since
-dis included, I didn't have to add
de type f " à ma requête de recherche:C'est à l'aide de la
-exec
qui sera envoyé à chaque fichier ou répertoire individuellement à lals
de commande. Si vous avez 10 000 fichiers,ls
sera appelée à 10 000 fois.Ce peut-être plus efficace:
Cela permettra de groupe que de nombreux noms de fichiers que possible, à tenir dans la mémoire tampon de commande et de les transmettre à la fois à la
ls
de commande. Il va appeler lels
commande autant de fois que nécessaire pour remplir tous les fichiers. Par exemple, si vous avez 10 000 fichiers dans votrefind
de commande, lels
commande sera appelé peut-être une fois ou deux fois au lieu de 10 000 fois.Le problème est que
xargs
a des problèmes avec des drôles de noms de fichiers, et il y a quelques problèmes de sécurité comme indiqué dans la page de manuel:La
-print0
paramètre utilise unNUL
caractère pour séparer les noms de fichier au lieu d'unNL
et la-0
paramètre indiquexargs
d'utiliser leNUL
personnage comme un nom de fichier séparateur plutôt que espaces (les caractères dans le$IFS
variable d'environnement).Cela signifie en utilisant
-print0 | xags -0
fonctionne presque tout le temps, mais vous pouvez toujours décider que-exec ls
est une meilleure façon d'aller.OriginalL'auteur David W.
Vous pouvez utiliser différentes options à printf (homme)
-printf
sur la version GNU defind
. Il n'y a pas-printf
paramètre sur d'autres systèmes Unix, il n'est donc pas universelle. Sur mon Mac,-printf
n'existe pas. Toutefois, si l'OP est à l'aide de--time-style
dansls
, il a les outils GNU, et-printf
devrait fonctionner.FWIW -printf ne peut pas simuler le x -> y la notation que ls utilise des liens symboliques.
Remarque:
%C
vous donne lactime
, qui ne correspondra pas à la date que vous obtenez à partir dels -l
, qui estmtime
. Si vous voulez obtenir le mêmemtime
qui correspond àls -l
, utilisez%T
au lieu de%C
.OriginalL'auteur Ken