La find
commande sous Linux a beaucoup d'options par rapport à la find
commande sous SunOS ou Solaris.
Je veux utiliser la find
commande comme ceci:
find data/ -type f -name "temp*" -printf "%TY-%Tm-%Td %f\n" | sort -r
Cela fonctionne parfaitement sur une machine Linux, mais la même commande n'a pas l'option -printf
sur une machine SunOS. Je souhaite personnaliser ma sortie au "%TY-%Tm-%Td %f\n"
format.
Veuillez suggérer des alternatives pour SunOS.
shell-script
find
solaris
Pratik Mayekar
la source
la source
find
sur Solaris, installez le package findutils .Réponses:
Notez que cela n'a rien à voir avec Linux; ce
-printf
prédicat est spécifique à l'implémentation GNU defind
. Linux n'est pas un OS, c'est juste le noyau trouvé dans un certain nombre d'OS. Alors que la plupart de ces systèmes d'exploitation utilisaient autrefois un espace utilisateur GNU, la grande majorité des systèmes d'exploitation utilisant Linux sont désormais intégrés et ont des commandes de base s'ils en ont.La
find
commande GNU , antérieure à Linux, peut être installée sur la plupart des systèmes d'exploitation de type Unix. Il était certainement utilisé sur Solaris (appelé SunOS à l'époque) avant la sortie de Linux.De nos jours, il est même disponible en tant que package Oracle pour Solaris. Sous Solaris 11, c'est dans
file/gnu-findutils
et la commande est nomméegfind
(pour GNUfind
, pour la distinguer de la proprefind
commande du système ).Maintenant, si vous ne pouvez pas installer de packages, votre meilleur pari est probablement d'utiliser
perl
:Ici, nous utilisons toujours
find
(implémentation Solaris) pour trouver les fichiers, mais nous utilisons son-exec
prédicat pour transmettre la liste des fichiers àperl
. Etperl
fait unlstat()
sur chacun pour récupérer les métadonnées du fichier (y compris l'heure de modification en tant que 10ème élément ($s[9]
)), l'interprète dans le fuseau horaire local (localtime()
) et le formate (strftime()
) qu'il est ensuite àprint
côté du nom de fichier ($_
est la variable de boucle si aucun n'est spécifié dans le texte d'erreur de l'échec du dernier appel systèmeperl
et en$!
est l'équivalentstderror(errno)
.la source
ls
type de sortie, voir Spécification du mode liste dans pubs.opengroup.org/onlinepubs/9699919799/utilities/pax.htmlfind
est-printf
antérieur à POSIX.2, donc les gens de POSIX sont à blâmer ici. Notez également que la spécification POSIX n'était pas publique avant les années 2000. Je blâmerais toujours les gens de GNU d'avoir introduit leurstat
plus d'une décennie plus tard avec une syntaxe différente et inférieure pour sa spécification de format.Une autre façon de l'aborder est avec le
find2perl
script, qui convertit (ici, un sous-ensemble) d'unefind
commande en un script perl correspondant. Le script perl utilise unFile::Find
module pour faire le gros du travail. Parce que le script find2perl sur mon système ne supportait pas le-printf
prédicat, je l'ai ajouté manuellement:Sur deux exemples de fichiers que j'ai créés, la sortie est la même:
la source