Lâoption -printf
fait partie des tests spĂ©ciaux de la commande, qui retourne toujours vrai mais qui permet de modifier la sortie standard de la commande, en interprĂ©tant les sĂ©quences dâĂ©chappement \
et les directives %
.
Lâutilisation de cette option est largement sous exploitĂ©, car elle Ă©vite de devoir analyser la sortie de find pour retrouver certaines informations du fichier, elle peut ĂȘtre avantageusement utilisĂ©e en lieu et place de -exec
qui nécessite la création de processus fils.
La largeur et la prĂ©cision des champs peuvent ĂȘtre spĂ©cifiĂ©s comme dans la fonction printf
du langage C. Mais notez que la plupart des champs sont affichĂ©s Ă lâaide de %s
plutĂŽt que %d
, ce qui veut dire que les drapeaux ne fonctionneront peut-ĂȘtre pas comme vous vous y attendiez. Cela veut aussi dire que le drapeau -
fonctionnera (il force lâalignement des champs Ă gauche).
La documentation de find met en garde sur les noms de fichiers peu courants contenant des caractĂšres inhabituels. Ce nâest pas un problĂšme spĂ©cifique Ă find, mais cette commande est souvent liĂ©e Ă des traitements massifs et elle « dĂ©couvre » les noms de fichier, les risques sont donc nĂ©cessairement plus grands.
De maniĂšre gĂ©nĂ©rale, il vaut mieux bannir autant que possible les fichiers ayant des espaces. Ă ma connaissance, il nây a aucune solution fiable pour traiter des fichiers avec des noms contenant un saut de ligne avec bash, tout autre langages de scripts.
Contrairement Ă -print
, -printf
nâajoute pas de saut de ligne Ă la fin de la chaĂźne.
SĂ©quences dâĂ©chappements
Pour commencer voici les sĂ©quences dâĂ©chappement permettant de gĂ©rer les caractĂšres spĂ©ciaux :
-
SĂ©quences dâĂ©chappements
Description \a
Sonnerie (Beep) \b
Effacement arriĂšre (Backspace) \c
ArrĂȘter immĂ©diatement lâimpression du format et vider le flux de sortie \f
Saut de page \n
Saut de ligne \r
Retour chariot \t
Tabulation horizontale \v
Tabulation verticale \0
CaractĂšre ASCII NUL \\
Un caractĂšre \
littéral\NNN
Le caractĂšre ASCII dont le code est NNN
(en octal)Un
\
suivi de nâimporte quel autre caractĂšre est traitĂ© comme un caractĂšre ordinaire ; les deux caractĂšres sont donc affichĂ©s.
Les directives principales
Les principales directives sont les suivantes :
Description | |
---|---|
%% | Un caractÚre pourcentage littéral % . |
%a | Date du dernier accÚs au fichier, dans le format renvoyé par la fonction C ctime . |
%Ak | Date du dernier accÚs au fichier, dans le format spécifié par k , voir ci-dessous le formatage des dates. |
%c | Date de derniÚre modification du statut du fichier, dans le format renvoyé par la fonction C ctime . |
%Ck | Date de derniÚre modification du statut du fichier, dans le format spécifié par k , voir ci-dessous le formatage des dates. |
%d | Profondeur du fichier dans lâarborescence des rĂ©pertoires, La valeur 0 signifiant que le fichier est un paramĂštre de la ligne de commande (typiquement le rĂ©pertoire oĂč Ă commencer la recherche). |
%f | Nom du fichier, sans aucun nom de répertoire (dernier élément uniquement). |
%g | Nom du groupe propriĂ©taire du fichier, ou identifiant de groupe numĂ©rique si le groupe nâa pas de nom. |
%G | Identifiant de groupe numérique du fichier. |
%h | RĂ©pertoires en tĂȘte du nom de fichier (tout sauf la derniĂšre partie). Si le nom du fichier ne contient aucune barre oblique (/ ) (donc si câest un fichier du rĂ©pertoire courant), alors lâoption %h rajoutera . . |
%l | Destination du lien symbolique (vide si le fichier nâest pas un lien symbolique). |
%m | Bits dâautorisation dâaccĂšs au fichier (en octal). Cette option utilise les nombres « traditionnellement » utilisĂ©s dans la plupart des implĂ©mentations dâUnix, mais si votre systĂšme utilise un ordre inhabituel de la forme octale des bits de permissions, alors vous observerez une diffĂ©rence entre la valeur rĂ©elle des modes du fichier et la sortie de %m . On veut habituellement un zĂ©ro en dĂ©but de ce nombre, et pour lâobtenir, vous pouvez utiliser le drapeau # (« %#m  », par exemple). |
%M | Les permissions du fichier (sous forme symbolique, comme dans ls). |
%n | Nombre de liens physiques sur le fichier. |
%p | Nom du fichier. |
%P | Nom du fichier, en retirant le nom du paramÚtre de ligne de commande à partir duquel le fichier a été trouvé. |
%s | Taille du fichier en octets. |
%t | Date de derniÚre modification du fichier, dans le format renvoyé par la fonction C ctime . |
%Tk | Date de derniÚre modification du fichier, dans le format spécifié par k , voir ci-dessous le formatage des dates. |
%u | Nom du propriĂ©taire du fichier, ou identifiant utilisateur numĂ©rique si lâutilisateur nâa pas de nom. |
%U | Identifiant utilisateur numérique du propriétaire du fichier. |
%y | Type du fichier (comme dans ls -l), U pour type inconnu (ce qui ne devrait pas arriver). |
%Y | Type du fichier (comme pour %y ), suivi, pour les liens symboliques, de : L=boucle, N=inexistant. |
Un caractĂšre %
suivi de nâimporte quel autre caractĂšre est supprimĂ©, mais le second caractĂšre est affichĂ© (ne soyez pas trop confiant cependant, car de nouveaux caractĂšres de format pourront ĂȘtre un jour utilisĂ©s). Un %
Ă la fin de lâargument de format peut engendrer un comportement alĂ©atoire puisquâil nây a aucun caractĂšre suivant. Ce qui peut ĂȘtre plus ou moins grave suivant les cas.
Les options %m
et %d
gĂšrent les drapeaux #
, 0
et +
, Ă lâinverse des autres directives, mĂȘme si elles affichent des nombres. Les autres directives numĂ©riques qui ne gĂšrent pas ces drapeaux sont G
, U
, b
, D
, k
et n
. Le drapeau de format -
est gĂ©rĂ©, et transforme lâalignement des champs (qui sont par dĂ©faut alignĂ©s Ă droite) en alignement Ă gauche.
La gestion de lâaffichage des dates
-
Formattage des dates
Pour contrĂŽler lâaffichage des dates dans le cas des directives :
%Ak
(dernier accĂšs au fichier),%Ck
(derniĂšre modification du statut du fichier),%Tk
(derniÚre modification du fichier) il existe de plusieurs options.Le format spécifié par
k
, qui doit ĂȘtre soit un@
, soit une directive pour la fonction Cstrftime
. Les valeurs possibles dek
sont indiquĂ©es ci-dessous, certaines dâentre elles ne sont pas disponibles sur tous les systĂšmes, Ă cause des diffĂ©rences entre les fonctionsstrftime
existantes.Description @
Secondes écoulées depuis le 1er janvier 1970 à 00 h 00 GMT, avec une partie décimale. Champs horaires :
Description H
Heure ( 00
..23
)I
Heure ( 01
..12
)k
Heure ( 0
..23
)l
Heure ( 1
..12
)M
Minute ( 00
..59
)p
AM ou PM, avec la désignation locale r
Heure au format 12Â heures ( hh:mm:ss [AP]M
)S
Seconde ( 00.00
..61.00
). Accepte une partie décimale.T
Heure au format 24Â heures ( hh:mm:ss
)+
La date et lâheure, sĂ©parĂ©es par un +
,2004-04-28+22:22:05
par exemple. Ceci est une extension GNU. Lâheure est donnĂ©e dans la zone horaire courante (qui peut ĂȘtre modifiĂ©e via la variable dâenvironnementTZ
). Le second champ contient une partie décimale.X
ReprĂ©sentation locale de lâheure ( H:M:S
)Z
Fuseau horaire (par exemple MET
), ou rien si le fuseau horaire est indéterminé.Champs de date :
Description a
Abréviation locale du jour de la semaine ( lun
..dim
)A
Nom local entier du jour de la semaine, de longueur variable ( lundi
..dimanche
)b
Abréviation locale du mois ( jan
..déc
)B
Nom local entier du mois, de longueur variable ( janvier
..décembre
)c
Date et heure locale ( Sat Nov 04 12:02:33 EST 1989
). Le format utilisĂ© est le mĂȘme que pourctime
, et, afin de prĂ©server la compatibilitĂ© avec ce format, il nây a pas de partie dĂ©cimale pour les secondes.d
QuantiĂšme du mois ( 01
..31
)D
Date ( mm/jj/aa
)h
Identique Ă b
j
Jour de lâannĂ©e ( 001
..366
)m
Mois ( 01
..12
)U
NumĂ©ro de la semaine dans lâannĂ©e, les semaines commençant le dimanche ( 00
..53
)w
Jour de la semaine ( 0
..6
)W
NumĂ©ro de la semaine dans lâannĂ©e, les semaines commençant le lundi ( 00
..53
)x
Représentation locale de la date ( mm/jj/aa
)y
Les deux derniers chiffres de lâannĂ©e ( 00
..99
)Y
Année ( 1970
âŠ)
Les directives plus complexes
Le tableau des directives -printf
a Ă©tĂ© volontairement nettoyĂ© des directives dont lâutilitĂ© peuvent ĂȘtre moins Ă©videntes.
-
Autres directives
Description %b
Taille de lâespace disque consommĂ© par le fichier, en nombre de blocs de 512 octets. Puisque lâespace disque est allouĂ© par multiple de la taille dâun bloc du systĂšme de fichiers, on obtient souvent un rĂ©sultat supĂ©rieur Ă %s
/512. Il peut aussi ĂȘtre infĂ©rieur si le fichier est creux (« sparse file »).%D
Le numéro du périphérique sur lequel le fichier est rangé (la valeur du champ st_dev field
de la structurestat
) exprimé en décimal.%F
Type de systĂšme de fichiers sur lequel se trouve le fichier. Cette valeur peut ĂȘtre utilisĂ©e pour lâoption -fstype
.%k
Taille du fichier, en nombre de blocs de 1 kilo-octet. Puisque lâespace disque est allouĂ© par multiple de la taille dâun bloc du systĂšme de fichiers, on obtient souvent un rĂ©sultat supĂ©rieur Ă %s
/1024. Il peut aussi ĂȘtre infĂ©rieur si le fichier est Ă©parpillĂ©.%H
ParamÚtre de la ligne de commande à partir duquel le fichier a été trouvé. %i
NumĂ©ro dâ« inode » du fichier (en dĂ©cimal). %S
Densité du fichier, calculée par la formule ( TAILLEBLOC
*nb_bloc
/taille_fichier
). La valeur obtenue pour un fichier rĂ©gulier dâune certaine taille dĂ©pend du systĂšme dâexploitation. Toutefois, la valeur normalement attendue pour un fichier creux (« sparse file ») est infĂ©rieure Ă 1.0, tandis quâun fichier qui utilise lâindirection de blocs pourra obtenir une valeur supĂ©rieure Ă 1.0. La valeur deTAILLEBLOC
est dĂ©pendante du systĂšme, mais est souvent de 512 octets. Si le fichier a une taille nulle, la valeur affichĂ©e est indĂ©finie. Sur les systĂšmes qui nâoffrent pas la gestion des nombres de blocs, la valeur de la densitĂ© du fichier sera de 1.0.
Liens
- Billet sur: đ Attributs des fichiers sous Linux
኿