Misfu, le site des cours Informatique/Bureautique/Mathematiques


 

Recherche de fichiers et archivage sous Linux

Contenu du dossier


Recherche de fichiers : commande find


Compression de fichiers : Commandes de compression et de décompression de fichiers: compress,uncompress,zcat, gzip, gunzip, bzip2 et bunzip2


Archivage de fichiers: cpio


Combinaison des commandes find, cpio et bzip2


Archivage de fichiers à la GNU : tar


Recherche de fichiers : Commande find


Importance de la commande :

UNIX permet de gérer un très grand nombre de fichiers et il n'est pas toujours facile de trouver celui dont on a besoin.


Description de la commande :

De l'anglais find, cette commande permet de localiser facilement un fichier. Elle recherche les fichiers remplissant certaines conditions, en commençant par le répertoire indiqué ou le répertoire courant. La recherche se fait de façon récursive dans tous les sous-répertoires. Les conditions peuvent porter sur le nom ou le type du fichier, le propriétaire, la date de création ou de modification. Tout fichier trouvé est traité par les options de commande fournies.


Syntaxe :


find Répertoire_de_départ [Critères] [Options de commande]


Principaux critères utilisables :


Critère

Signification

-name Fichier

Recherche par nom de fichier. Caractère * utilisable

-type Type

Recherche par type de fichier : Type = f (fichier normal), d (répertoire), c (fichier de périphérique orienté caractère), b (fichier de périphérique orienté bloc), p (Tube nommé ou FIFO).

-user Nom

Recherche par propriétaire

-group Nom

Recherche par groupe

-size Nombre

Recherche par taille en blocs (par défaut) ou en octets

-atime Jour

Recherche par date de dernier accès en lecture (Jour en nombre de jours)

-mtime Jour

Recherche par date de dernière modification (Jour en nombre de jours)

-ctime Jour

Recherche par date de création (Jour en nombre de jours)

-perm Droits

Recherche par droits d'accès

-links Nombre

Recherche par nombre de références


Remarques :

Les nombres et date peuvent être précédés par les signes : + (supérieur à), - (inférieur à).

On peut combiner les critères avec des opérateurs logiques :

  • critère1 critère2 ou critère1 -a critère2 correspond au et logique ;

  • ! critère correspond au non logique ;

  • (critère1 -o critère2 ) correspond au ou logioque.


Principales options de commande


Option

Signification

-print

Demande que le résultat de la commande doit être affiché à l'écran

-exec command {} ;

Applique la commande spécifiée aux fichiers trouvés sans dialogue. Remarquer l'espace entre l'accolade fermante et l'ant-slash ; de même que l'absence d'espace entre l'anti-slash et le point virgule

-ok command {} ;

Applique la commande spécifiée aux fichiers trouvés avec demande de confirmation. Mêmes remarques.


Exemples :


$ find . -mtime -3 -print


Dans cet exemple, on cherche à affiche à affiche tous les fichiers dont les dernières modifications remontent à moins de 3 jours à partir du répertoire courant.


$ find /usr -type f -size 5210c -print


Dans cet exemple on recherche tous les fichiers ayant une taille exacte de 5120 caractères en commençant par le répertoire /usr


$ find . -type f -size +200k -print


Dans cet exemple on recherche tous les fichiers ayant une taille supérieure à 200 Ko.


$ find . -name abra -print

$ find . -name '[A-Z]*' -print


Remarquez ici la nécessité des doubles quotes lorsqu'il s'agit d'utiliser des métacaractères.


$ find . -ok rm {} ;


Vous avez là un exemple avec option de commande. Il s'agit de supprimer tous les fichiers qui seront trouvés, avec demande de confirmation à l'utilisateur.


$ find / -type f -user olivier -perm 755 -print


C'est un exemple de recherche combinée.


Redirection des messages d'erreur et autres subtilités


En tant que simple utilisateur, vous n'avez pas forcément le droit d'accès à un certain nombre de répertoires. Par conséquent, la commande find peut générer beaucoup de messages d'erreur du genre permission refusée, qui pourraient noyer l'information utile. Pour éviter cela, il est possible de rediriger les messages d'erreur dans un fichier poubelle (comme /dev/null). Dans le cas de /dev/null, les messages d'erreur sont perdus.


Exemple : $ find /usr -type f -name pingouin 2>| /dev/null


Un fonction intéressante de find est de pouvoir être utilisé avec d'autres commandes Unix/Linux comme dans l'exemple ci-après :


$ find /usr -type f -print | xargs grep pingouin 2>| /dev/null


Dans cet exemple, nous recherchons dans le réperttoire /usr tous les fichiers normaux (sans les répertoires et autres fichiers spéciaux) et dans ces fichiers tous ceux qui contiennent la chaîne pingouin.


Compression/décompression de fichiers


Commandes compress/uncompress et zcat :

La commande compress permet de réduire la taille des fichiers spécifiés en utilisant le codage adaptatif de Lempel-Ziv. Si la réduction est possible, chaque fichier est remplacé par un nouveau fichier de même nom avec une extension .Z pour indiquer qu'il s'agit désormais d'un fichier compressé (compacté). Et tous les attributs du fichier original sont préservés. Si aucun fichier n'est spécifié ou si '-' est spécifié, l'entrée standard est compressée sur la sortie standard.


La commande uncompress restitue les fichiers compressés dans leur état original (c'est-à-dire les décompressé). Les fichiers résultats ont les nom, propriétaire et droits d'accès originaux et l'extension .Z est enlevé. Si aucun fichier n'est spécifié ou si '-' est spécifié, l'entrée standard est compressée sur la sortie standard.


La commande zcat restitue les fichiers compressés dans leur état original (c'est-à-dire les décompresse) et envoie le résultat sur la sortie standard (comportement non-destructif. Si aucun fichier n'est spécifié ou si '-' est spécifié, l'entrée standard est compressée sur la sortie standard.


Sur HP-UX 10.20, les deux premières commandes ont une variante permettant de compresser/décompresser un répertoire et tous ses sous-répertoires : compressdir/uncompressdir


Syntaxes :


compress [-d] [-f|-z] [-z] [-v] [-c] [-V] [Fichier ...]

uncompress [-f] [-v] [-c] [-V] [Fichier ...]

zcat [-V] [Fichier ...]

compressdir [options][Répertoire ...]

uncompressdir [options][Répertoire ...]


Les options les plus courantes :


Option

Signification

-d

Décompresse le fichier. compress -d est équivalent à uncompress

-f

Force la compression même si le fichier est vide. Sans cette option, un dialogue a lieu pour chaque fichier vide. Utile pour compressdir.

-z

Ne force pas la compression des fichiers vides. Utile pour compressdir.

-v

Affiche un message donnant le pourcentage de réduction de chaque fichier compressé.

-c

Force compress et uncompress à écrire sur la sortie standard ; aucun fichier n'est changé. uncompress -c <==> zcat

-V

Affiche la version courante et les options de compilation sur le canal standard d'erreur.


Exemples :


$ compress -v Fessai

Fessai : Compression : 23.55% -- replaced with Fessai.Z

$ uncompress Fessai.Z

$ compress -f Fessai

$ compress -d Fessai.Z

$ uncompress -c arch.tar.Z | tar -tvf -


Commandes gzip/gunzip


Projet GNU de la Free Software Foundation de l'université de Cambridge, Massachussetts.


Description : (un programme efficace distribué dans le cadre du projet GNU)


La fonction de base de la commande gzip consiste à prendre un fichier, le compresser, sauvegarder la version compactée sous la forme .gz, puis à supprimer l'original. Elle stocke le nom du fichier original dans la version compressée.


Si aucun fichier n'est spécifié, gzip tentera de compresser les données arrivant sur l'entrée standard. De même l'option -c de gunzip permet d'écrire les données décompactées sur la sortie standard.


zcat est souvent identique à gunzip -c.


Syntaxe :


gzip [-l] [Fichier]

gunzip [-c] [-N] [Fichier]


Quelques options :

Option

Signification

-l

Permet d'obtenir des informations sur un fichier compressé.

-c

Force l'écriture des résultats sur la sortie standard

-N

Force l'utilisation du nom du fichier original.


Exemples :


$ gzip bidules.txt

$ ls -l

$ mv bidules.txt.gz machin.txt.gz

$ ls -l

$ gunzip -N machin.txt.gz

$ ls -l

$ ls -laR $HOME | gzip > liste.gz

$ gunzip -c liste.gz |more


Commandes bzip2 et bunzip2


Description :


bzip2 compacte des fichiers en utilisant l'algorithme de réduction de texte par tri de blocs de Burrows-Wheeler, et le codage d'Huffman. La réduction est généralement nettement meilleure que celle atteinte par des compacteurs plus conventionnels basés sur LZ77/LZ78, et approche les performances de la famille des compacteurs statistiques PPM.


Les options de ligne de commandes sont délibérément très similaires à celles de GNU gzip, mais elles ne sont pas identiques.


bzip2 attend une liste de noms de fichiers pour accompagner les options de ligne de commandes.


Chaque fichier est remplacé par une version compactée de lui-même, avec le nom « nom_original.bz2 ».


bzip2 et bunzip2, n'écraseront par défaut pas les fichiers existants. Si vous voulez que cela se produise, utilisez l'option -f.


Syntaxe :


bzip2 [-cdztkqv] [noms_fichiers]

bunzip2 [-fkvs] [noms_fichiers]


Quelques options importantes


Options

Signification

-c

Compacter ou décompacter sur la sortie standard

-d

Forcer la décompression. Equivalent à bunzip2.

-z

Forcer la compression

-t

Vérifier l'intégrité des fichiers spécifiés

-k

Garder (ne pas effacer) les fichiers d'entrée durant la compression ou la décompression.

-q

Supprimer les messages d'avertissement non essentiels. Ceux se rapportant aux erreurs d'E/S et à d'autres événements critiques ne sont pas supprimés.

-v

Mode verbeux. Montre le coefficient de compression pour chaque fichier traité.


Sauvegarde et archivage de fichiers


Sauvegarde de masse : Commande cpio


Description : De l'anglais copy input output, cette commande copie une entrée sur une sortie en archivant tout au passage.

Elle prend l'entrée standard comme source de la liste des fichiers à copier et la sortie standard comme destination de l'archive.

Par tube, on peut diriger la sortie des commandes ls ou find vers cpio

Une archive au format cpio est composée de la concaténation du contenu des fichiers qui ont servi à la créer.

Syntaxe :

cpio -o [v]

cpio -i [dfmrtuv]] [motifs]

cpio -p [dmmruv] catalogue


Les options -o -i et -p déterminent l’opération à réaliser


Option et arguments

Signification ou effet

-o

Ecriture sur la sortie standard des fichiers dont la liste est donnée sur l’entrée standard avec un nom de fichier par ligne

-i

Extraction de fichiers à partir de l’entrée standard. l’argument motif permet une sélection à l’aide des métacaractères du shell (*, ?, etc.)

-p

Recopie d’une liste de fichiers fournie à partir de l’entrée standard sur un catalogue. Cette option permet de recopier des arborescences lorsqu’elle est utilisée avec la commande find.

-d

Les répertoires sont créés si nécessaire.

-f

Ne recopie pas les fichiers dont les noms ne correspondent pas aux motifs donnés.

-m

Les fichiers archivés conservent la date de dernière modification du fichier source lors de leur extraction.

-r

Permet de renommer les fichiers de manière interactive. Si Entrée sans un nom de fichier, ce dernier n’est pas restauré.

-t

Donne la liste des fichiers présents dans l’archive.

-u

Cette option force une copie inconditionnelle. Si cette option n’est pas présente, un fichier existant n’est pas écrasé par une copie provenant de l’archive si celle-ci est antérieure.

-v

Liste les noms de fichiers soumis à l’opération Conjointement avec t, elle donne des informations supplémentaires similaires à ls -l.


Exemples :


$ ls | cpio -o > /dev/floppy

$ find . -depth -print | cpio -o > /dev/rmt0


Dans cet exemple, on sauvegarde le contenu du répertoire courant avec les souss-répertoires.


$ cd /etc./mail

$ ls |cpio -o > /tmp/f.cpio


Ici on sauvegarde le répertoire courant.


$ mkdir /tmp/test; cd /tmp/test

$ cpio -id < /tmp/f.cpio


Ici on restaure le répertoire courant.


Exemples commentés de combinaison de find, cpio et bzip2


$ cd /

$ find etc -depth -xdev -print | cpio -o 2>> /var/log/sauvegarde.log | bzip2 -c > /opt/etc.cpio.bz2


Dans cet exemple, on récupère tous les noms de fichiers du répetoire /etc et de ses sous-répertoires, en traitant d'abord les sous-répertoires avant le répertoire lui-même (option -depth) mais en ignorant les sous-répertoires situés sur d'autres systèmes de fichiers (option -xdev). Ensuite une archive est constituée qui est, à son tour compressée et sauvegardée dans le fichier /opt/etc.cpio.bz2. Pendant le traitement les éventuels messages d'erreur sont envoyés dans le fichier /var/log/sauvegarde.log. Si on ne souhaite pas analyser ces messages après coup, on aurait pu procéder à la redirection vers le fichier-puits de données sans fond /dev/null.


La commande cd / précédent le traitement proprement dit assure d'avoir dans l'archive des noms relatifs de fichiers commençant par etc du genre etc/sysconfig/network.


Si on avait fait « find /etc -depth ... » l'archive aurait enregistré des noms absolus.


$ cd /

$ bzip2 -dc /opt/etc.cpio.bz2 | cpio -uid 2>>/var/log/install.log


On restaure l'archive qui a été constitué ci-dessus et on envoie les éventuels messages d'erreur dans le fichier /var/log/install.log. On aurait pu les envoyer vers /dev/null.


Archivage de fichiers : Commande tar


Description :

De l'anglais tape archive, cette commande permet d'assembler de nombreux fichiers en une seule archive, tout en conservant tous les attributs des fichiers (date, permissions, propriétaires)

Si la commande reconnaît parmi ses paramètres un nom de répertoire, celui-ci est sauvegardé avec tous ses sous-répertoires et ses fichiers de manière récursive.

Syntaxe : tar


= une simple lettre indiquant l'opération à réaliser ;

= une liste d'options (d'une lettre) à cette fonction ;

= liste des fichiers à archiver ou désarchiver.


Les valeurs possibles de


Signification

-c

De l'anglais Create, pour créer une nouvelle archive

-x

De l'anglais extract, pour extraire des fichiers d'une archive

-t

De l'anglais table of content, pour afficher le contenu d'une archive

-r

Pour rajouter des fichiers à une archive

-u

De l'anglais update, pour remplacer les anciens fichiers par leurs nouvelles versions.


Les valeurs possibles de


Signification

-v

De l'anglais verbose, pour avoir plus d'informations lors de l'archivage ou de l'extraction

-k

De l'anglais keep, pour conserver tout fichier existant avant l'extraction (pas d'écrasement (pas universelle).

-f

De l'anglais file, pour indiquer le nom du fichier d'archive à lire ou à écrire.




Exemples :


$ tar -cf. mt.tar mt


Dans cet exemple, on archive le répertoire mt. Attention à la position de l'option f. Elle doit, si elle est utilisée, être toujours la dernière et le nom de fichier qui la suit doit être le nom de l'archive.


Précisions sur le GNU tar


Il supporte en plus la compression/décompression avec l'option -z, avec la syntaxe suivante :


tar cvzf .tar.gz


Bibliographie


Nous vous conseillons fortement de dire les pages des manuels des différentes commandes étudiées dans ce dossier. Vous y trouverez beaucoup d'autres informations ou des options spécifiques qui peuvent servir dans certaines circonstances particulières.




Par l'équipe technique A.N.F.A