cClaude.rocks ☕ Le blog

[Nouvelles technologies du libre, sciences et coups de gueule…]

Menu
đŸ˜€ Ce billet a Ă©tĂ© Ă©ditĂ© le : 2022-09-03

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 C strftime. Les valeurs possibles de k sont indiquĂ©es ci-dessous, certaines d’entre elles ne sont pas disponibles sur tous les systĂšmes, Ă  cause des diffĂ©rences entre les fonctions strftime 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’environnement TZ). 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 pour ctime, 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 structure stat) 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 de TAILLEBLOC 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

኿


â„č 2006 - 2024 | 🏠 Accueil du domaine | 🏡 Accueil du blog