Circum Blog

Circum Net – IT – Conseils pratiques

Passage en minuscules des noms de fichiers

Systèmes, Unix

Il se peut que dans certaines situations (par souci de cohérence, de compatibilité…) l’on doive s’assurer de la basse casse des noms de fichiers d’un répertoire. Dans ce cas, les possibilités de scripting offertes par le shell peuvent s’avérer très utiles afin d’obtenir rapidement un conversion.

Voici, à titre d’exemple, un script de base qui permet de convertir en minuscules le nom des fichiers se trouvant dans un répertoire.

for x in *
do
mv $x `echo $x |tr ‘[:upper:]’ ‘[:lower:]’`
done

Pour exécuter ce script, il suffit, à partir d’une fenêtre terminal, de se placer dans le répertoire à traiter (cd) et de taper les lignes de codes présentées ci-dessus. Après avoir fourni l’instruction ‘done’, la conversion sera opérée.

Description des composants du script

– Une boucle ‘for’ prenant en compte tous les fichiers (*) du répertoire courant. A chaque passage dans la boucle le nom d’un fichier est stocké dans la variable ‘x’.

– Une instruction ‘mv’ qui renomme les fichiers. Cette commande prend 2 arguments: le premier étant le nom initial du fichier en cours de traitement (représenté par l’appel à la variable ‘x’) et le second étant le nouveau nom en minuscules (`echo…`).

– Une instruction qui donne le nom en minuscules du fichier. Celle-ci est encadrée par des backquotes (`) qui donne lieu à son évaluation. Elle utilise la commande ‘echo’ qui envoie le nom du fichier (c’est-à-dire la variable ‘x’) via l’opérateur de redirection d’input ‘|’ à la commande ‘tr’ qui effectue elle la traduction en minuscules.



Find ou le Sherlock Unix

Systèmes, Unix

La commande find permet de retrouver des fichiers à partir de certains critères.

Concrètement, la commande ‘find’ scane un répertoire donné (et les elements qu’il contient) à la recherche de fichiers qui satisfont certains critères. Parmi ceux-ci, le nom, la taille, le propriétaire, le mode ou encore la date de dernière modification peuvent être testés. Lorsqu’un fichier cadre avec les critères précisés ‘find’ peut lui associer une action.

La commande ‘find’ à la structure suivante:

> find [directory] [search expression] [actions]

L’instruction ci-dessous aura par exemple pour effet de chercher un fichier dont le nom correspond à la chaîne de caractères ‘project’ à partir du répertoire ‘/usr’ et, si le résultat est positif, d’imprimer sur la sortie standard le chemin d’accès du fichier concerné.

> find /usr -name project -print

L’instruction ci-dessous recherchera, elle, les fichiers dont le nom se termine par la chaîne de caractères ‘.jpg’ à partir du répertoire courant et, si le résultat est positif, affichera sur la sortie standard le chemin d’accès des fichiers concernés.

> find. -name ‘*.jpg’ -print

Les principaux critères de recherche possibles pour la commande ‘find’:

-name [filename]
recherche sur le nom du fichier

-perm [mode]
recherche sur les droits d’accès

-user [username]
recherche sur le propriétaire

-group [groupname]
recherche sur le groupe

-size [value][c]
recherche sur la taille en nombre de blocs (un bloc représentant 512 bytes ou 1/2 kb – si la lettre c est précisée, le calcul se fait sur le nombre de caractères)

-atime [value]
recherche par date de dernier accès (value représentant ici le nombre de jours depuis le dernier accès)

-mtime [value]
recherche par date de dernière modification (value représentant le nombre de jours depuis là denière modification)

-ctime [value]
recherche par date de création (value représentant le nombre de jours depuis la création)

Ces critères de recherche peuvent être combinés entre eux grâce aux opérateurs -a (ET) et -o (OU inclusif).

Exemples d’instructions de recherche

> find / -name Article1 -type f -print
Cette instruction recherche, à partir de la racine du système, le fichier nommé ‘Article1’. Si ce fichier est trouvé, son chemin d’accès sera affiché sur la sortie standard.

> find / -name Article1 -type f -exec chmod 755 {} ;
Cette instruction recherche, à partir de la racine du système, le fichier nommé ‘Article1’. Si ce fichier est trouvé, ses permissions sont modifiées (mode 755 c’est-à-dire: rwxr-xr-x). La paire d’accolade ‘{}’ implique une substitution du nom du fichier en traitement et la suite de caractères ‘;’ indique que la commande exec est clôturée.

> find. -name ‘[A-Z]*[0-9]’ -type f -print
Cette instruction recherche, à partir du répertoire courant, tous les fichiers dont le nom commence par une lettre majuscule et se termine par un chiffre.

> find /users -size +100000c -atime +7
Cette instruction recherche, à partir du répertoire ‘/users’, tous les fichiers dont la taille est supérieur à 100.000 caractères et qui n’ont pas été modifiés depuis plus de 7 jours.

> find. ( -name ‘*.log’ -a -mtime +7 ) -exec rm -f {} ;
Cette instruction recherche, à partir du répertoire courant, tous les fichiers dont le nom se termine par ‘.log’ et qui n’ont pas été modifiés depuis plus de 7 jours. Les fichiers qui sont trouvés seront effacés tel que précisé dans la commande -exec.
Dans cette instruction, les paranthèses délimitent l’expression de recherche et l’opérateur ‘-a’ combine les deux critères fournis (-name et -mtime) selon un ‘ET’ logique.