!ls -lR baz
Écrire un programme qui fait la liste des fichiers (pas les répertoires!) présents dans un répertoire donné (répertoire et sous-répertoires).
(Et qui affiche la liste, avec un nom par ligne ; exactement comme la commande find .
). S'il fonctionne sur le répertoire de test, l'essayer sur votre répertoire racine.
Indiquer le nombre de fichiers et le nombre de répertoires.
(Comme si on exécutait la commande find . -type f | wc -l ; find . -type d | wc -l
)
Indiquer le nombre de fichiers, le nombre de répertoires, et le nombre de liens symboliques. (Si il y a un lien toto qui pointe vers le répertoire truc, alors toto compte uniquement comme un lien symbolique -- pas comme un répertoire ; et il ne faut pas descendre dans ses sous-répertoires.)
Indiquer les mêmes nombres, mais en différenciant les éléments « publics » et les éléments « privés ». Un fichier est considéré comme « privé » si le groupe propriétaire et les autres utilisateurs n'ont aucun droit dessus ; sinon il est public.
Pour consulter les informations (taille, droits...) d'un fichier :
struct_stat=os.stat(chemin_du_fichier)
print struct_stat.st_size
print struct_stat.st_mode
Pour vérifier qu'on est propriétaire d'un fichier : utiliser le champ st_uid et la fonction os.getuid.
Il arrive souvent qu'un même fichier se retrouve présent avec des noms différents à divers emplacements. On peut, par exemple, avoir téléchargé plusieurs fois un même mp3 ou un document pdf, depuis des sites différents qui l'auront nommé différemment, et placé dans différents sous-répertoires.
Il peut être coûteux de comparer deux à deux de gros fichiers binaires, mais une fonction de hachage
comme md5 ou sha1 permet de détecter les fichiers identiques avec une quasi-certitude (module hashlib
).
On demande d'écrire un script duplicates qui prend comme paramètres optionnels une extension de nom de
fichier ( -e, --extension, defaut : None) un répertoire ( -d, --directory, défaut : répertoire courant)
et un fichier de sortie (-o, --output, défaut : sortie standard),
et renvoie les chemins complets vers les groupes de fichiers identiques, une ligne par fichier, et une ligne vide entre chaque groupe.
Par exemple :
jyt@drobie:~/monge> duplicates -e pdf -d tmp tmp/f38w5635114j1957.pdf tmp/qdesar.pdf tmp/brunet.pdf tmp/PhysRevE_68_041101.pdf tmp/eis.pdf tmp/JEDP_1999____A15_0.pdf tmp/exos07.pdf tmp/exos07-1.pdf tmp/exos07-2.pdf tmp/kshg21g4.pdf tmp/be9kd6kh.pdf tmp/uq8uiawn.pdf
La première étape de la construction d'un correcteur orthographique consiste à écrire une fonction qui vérifie si un mot est dans le dictionnaire (cf. TD1). La seconde consiste à proposer des corrections pour les mots qui n'y sont pas.
Deux mots u et v sont dits à distance d'édition 1 s'ils diffèrent par remplacement, insertion ou suppression d'un caractère.
Ecrire une fonction lookup(w) qui prend comme argument un mot arbitraire w et retourne la liste des mots du dictionnaire qui sont à distance 1 (ou 0) de w. On utilisera une expression régulière judicieusement construite. On pourra reprendre le dictionnaire du TD1.
Par exemple, on devrait avoir
>>> for x in lookup('ais'): print x, ... agis ai aie aies ail ails air airs ais aïs aise aisé aisy ait amis anis ans apis ars as avis axis bais bis dais dis fais fis gais gis hais jais lais lis mais mis nais ois pais pis rais ris sais sis tais vais vis >>>