Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 29/06/2009, à 21:14

amazilia

lister fichiers plus vieux que date D

bonjour,

comment faire pour lister dans un dossier (de manière récursive) tous les fichiers modifiés après le 1er mai 2009 à 18h30

merci d'avance

Hors ligne

#2 Le 29/06/2009, à 21:24

doc212

Re : lister fichiers plus vieux que date D

Salut

Il me semble que la commande find devrait faire l'affaire ... Après, elle offre tellement de possibilités que je ne connais pas la syntaxe exacte ...

Mais quelque chose du genre

find mon_repertoire -mtime -2

Par exemple pour lister tous les repertoire qui ont été modifiés il y a moins de 2*24 heures ...

Après, il y a une option -mmin pour spécifier le temps en minutes par exemple ...

man find

dans une console pour plus d'info ... mais il faut s'accrocher un peu pour la lecture :-)

Sinon, chez moi, dans le menu Raccourcis, j'ai l'entrée "Rechercher des fichiers" qui permet des spécifier pas mal d'options ...

Hors ligne

#3 Le 29/06/2009, à 22:40

amazilia

Re : lister fichiers plus vieux que date D

doc212 a écrit :

Salut

Il me semble que la commande find devrait faire l'affaire ... Après, elle offre tellement de possibilités que je ne connais pas la syntaxe exacte ...

Mais quelque chose du genre

find mon_repertoire -mtime -2

Par exemple pour lister tous les repertoire qui ont été modifiés il y a moins de 2*24 heures ...

Après, il y a une option -mmin pour spécifier le temps en minutes par exemple ...

man find

dans une console pour plus d'info ... mais il faut s'accrocher un peu pour la lecture :-)

Sinon, chez moi, dans le menu Raccourcis, j'ai l'entrée "Rechercher des fichiers" qui permet des spécifier pas mal d'options ...

salut

merci, cela marche très bien, à ceci prêt que certain fichiers ont des dates farfelues comme 2030 ou 2018 et donc je reparts à zero

il faudrait en fait que je compare les deux dossiers pour en extraire les fichiers dont la date a changé.

je suis en connexion ssh et donc ne peux passer que par la ligne de commande;

Philippe

Hors ligne

#4 Le 30/06/2009, à 02:41

doc212

Re : lister fichiers plus vieux que date D

Est-ce que le contenu des répertoires est le même ?

Dans le sens où si un fichier est dans un répertoire, il le sera dans l'autre aussi ?

Dans ce cas, ce qu'on peut simplement faire c'est écrire dans deux fichiers différents le listing récursif des répertoires avec la nom et la date de chaque fichier.

Ensuite comparer les deux fichiers, ligne par ligne pour n'afficher que les différences.

Par exemple:

find repertoire1 -type f -exec stat {} -c "%n %y" \;|cut -f 1 -d / --complement|sort > listing1.txt
find repertoire2 -type f -exec stat {} -c "%n %y" \;|cut -f 1 -d / --complement|sort > listing2.txt
diff listing1.txt listing2.txt -y --suppress-common-lines

En gros, la première commande find, ce qu'elle fait, c'est trouver dans le répertoire repertoire1 tous les fichiers qui sont de type fichiers réguliers (donc pas les répertoire, ni les liens) et à chacun de ces fichiers trouvés, exécuter la commande stat {} -c "%n %y" où {} sera remplacé par le nom du fichier trouvé.

La commande stat permet de récupérer les informations concernant les fichiers et les formater selon le format donné. Ici le format est "%n %y" çàd le nom du fichier, un espace, puis la date de la dernière modification Mais bon, il existe différentes dates associées à un fichier: par exemple si c'est la date du dernier accès qui vous intéresse, il faut mettre %x à la place de %y. Mieux vaut aller regarder dans le manuel de stat pour plus d'info. (man stat dans une console)

Donc par exemple, la sortie de la commande find donnera qqch du genre:

repertoire1/fichier1.txt 2009-06-30 02:10:34.000000000 +0200
repertoire1/sous-rep1/fichier3.txt 2009-06-29 21:17:37.000000000 +0200
repertoire1/fichier2.txt 2009-06-30 01:40:47.000000000 +0200

Si on met tout ça directement dans un fichier listing1.txt et qu'on fait de même avec le deuxième répertoire dans un fichier listing2.txt et puis qu'on les compare ligne par ligne, on va avoir un problème: on va trouver des différences partout, puisque tous les noms dans le fichier listing1.txt commencent par repertoire1 alors que dans listing2, ils commencent par repertoire2

Il faut donc "couper" cette première partie du nom de fichier. La commande cut sert à ça. Elle sélectionne des parties de ligne qu'on lui donne.

cut -f 1 -d / --complement

l'option -f 1 sélectionne le premier "champs"
l'option -d / précise que les champs sont délimités par le caractère /
l'option --complement précise qu'on veut garder le complément de ce qui a été sélectionné

Donc en gros, garder tout, sauf le premier champs, les champs étant délimités par le caractère /

En passant la sortie de find à la commande cut, on obtient qqch du style:

fichier1.txt 2009-06-30 02:10:34.000000000 +0200
sous-rep1/fichier3.txt 2009-06-29 21:17:37.000000000 +0200
fichier2.txt 2009-06-30 01:40:47.000000000 +0200

Après, pour être certain que les listings reprendont les fichiers dans le meme ordre, on les classe en passant la sortie de cut à la commande sort (qui trie les lignes)

fichier1.txt 2009-06-30 02:10:34.000000000 +0200
fichier2.txt 2009-06-30 01:40:47.000000000 +0200
sous-rep1/fichier3.txt 2009-06-29 21:17:37.000000000 +0200

Et voilà, là maintenant on peut écrire tout ça dans des fichiers textes en redirigeant la sortie de sort dans un fichier > listing1.txt

Enfin, on peut comparer les deux listings, ligne par ligne avec la commande diff. L'option -y précise qu'on veut afficher les sorties côte à côte (sinon diff marque ça de manière un peu spécial ...) et --suppress-common-lines précise qu'on ne veut voir que les différences...

C'est beaucoup de bla bla pour expliquer ce que font les 3 lignes de commandes à taper mais bon ... C'est important de comprendre ce qu'on fait pour pas faire de conneries et effectivement obtenir ce qu'on désire...

Je vous conseille de voir les manuels des commandes find, stat, cut, sort et diff.

C'est un peu long à lire mais bon ... vous pouvez vous contenter de lire ce qui vous intéresse.

J'espère que c'était clair. Par contre, une hypothèse importante pour que ça marche, c'est que le contenu des répertoires à comparer soient les même. Même si diff est capable de repérer les insertions dans la comparaison des fichiers, ça risque quand même de vous créer de mauvaises surprises.

Sinon, une alternative à tout ça, ce serait d'écrire un script, genre en python, en utilisant les modules os et os.path pour lister le contenu d'un répertoire et pour chaque fichier dans ce répertoire, aller chercher un fichier avec le meme nom dans l'autre répertoire et comparer les dates de modification.

Mais je ne connais pas votre niveau en programmation donc voilà ...

Bon courage :-)

Dernière modification par doc212 (Le 30/06/2009, à 02:46)

Hors ligne

#5 Le 01/07/2009, à 09:38

amazilia

Re : lister fichiers plus vieux que date D

doc212 a écrit :

...

Bon courage :-)

salut,

c'est super tout ça! je vais m'amuser avec et je reviens

merci

Philippe

Hors ligne