Contenu | Rechercher | Menus

Annonce

La nouvelle clé USB Ubuntu-fr est en prévente
Rendez-vous sur la boutique En Vente Libre

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 07/10/2019, à 17:01

cristobal78

(résolu) lister les dossiers modifiés depuis un certain temps

Bonjour amis du forum

il y a un moment que j'utilise cette commande :

find $HOME -name '.*' -prune -o -type f -mtime -3 -print

qui me liste tous les fichiers ayant subi une modif depuis les dernières 72 hrs (3 fois 24 hrs = 72 hrs), et cela sans prendre en compte ceux dont le nom commence par un point ( "." ) autrement dit les fichiers cachés.

Maintenant je voudrais obtenir un liste qui ne me donnera cette fois QUE le nom des dossiers ayant subi une modif telles que :

modif d'un sous dossier
chgnt d'un nom de sous dossier
modif contenu d'un fichier
ajout d'un fichier
suppression d'un fichier,
changement de nom d'un fichier
etc...

ce qui devrait donner une liste bcp plus courte ne laissant que le nom du (des) dossier(s) / sous dossier(s)  modifié(s)

Donc j'ai essayé ceci :

find $HOME -name '.*' -prune -o -type d -mtime -3 -print

qui est la ligne initiale avec "f" changé en "d"

Ça a l'air de fonctionner mais je me méfie qd même un peu.

Pensez vous que ce soit correct comme syntaxe ?

Dernière modification par cristobal78 (Le 11/10/2019, à 01:56)


un fixe DELL, 1 laptop LDLC et 1 laptop Lenovo, tous en 16.04.3 LTS - 64 bits

Hors ligne

#2 Le 07/10/2019, à 20:42

Postmortem

Re : (résolu) lister les dossiers modifiés depuis un certain temps

Salut,
La modification du contenu d'un fichier existant ne changera pas la date de modification du dossier.
L'ajout ou la suppression d'un fichier ou sous dossier changera la date de modification du dossier les contenant, mais pas des dossiers "au-dessus" dans la hiérarchie.
Changer le nom d'un fichier ou sous-dossier, je ne sais pas.

Dernière modification par Postmortem (Le 07/10/2019, à 20:44)


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#3 Le 09/10/2019, à 20:14

cristobal78

Re : (résolu) lister les dossiers modifiés depuis un certain temps

salut postmortem

Merci de ta réponse.
Eh oui tu as raison sur la 1-ere partie de ta réponse. smile

Pour ce qui est d'un chgnt de nom de fichier ou de dossier ça ne provoque pas non plus de modif de date dans le dossier parent.

Or ce qui m'intéresse c'est de savoir quels dossiers ont vu leur contenu modifié que ce soit :

- ajout d'un nouveau fichier,
- un fichier supprimé ou renommé,
- un fichier au contenu modifié et re-sauvegardé dans le dossier d'origine,

ou tout autre raison, et ce depuis un nombre donné de jours (ou plutôt de tranche de 24 hrs.

Ça n'a pas l'air d’être simple cette affaire là.  hmm


un fixe DELL, 1 laptop LDLC et 1 laptop Lenovo, tous en 16.04.3 LTS - 64 bits

Hors ligne

#4 Le 09/10/2019, à 21:04

kamaris

Re : (résolu) lister les dossiers modifiés depuis un certain temps

Une possibilité, c'est de reprendre ta commande de départ pour les fichiers, en lui demandant de n'afficher que les répertoires et en sortant ensuite les doublons :

find $HOME -name '.*' -prune -o -type f -mtime -3 -printf '%h\n' | uniq

---

En reprenant ta demande de départ, je me rends compte que cela n'y répond pas entièrement : les répertoires modifiés en tant que tels (pas leur contenu, mais par exemple par un renommage), ne seront pas listés.
Pour avoir tout le monde, tu peux enlever le -type f dans la commande ci-dessus, à moins que tu ne préfères avoir deux commandes séparées avec -type f et -type d pour distinguer les cas…

Dernière modification par kamaris (Le 09/10/2019, à 21:25)

Hors ligne

#5 Le 10/10/2019, à 17:21

cristobal78

Re : (résolu) lister les dossiers modifiés depuis un certain temps

J'ai trouvé ce qu'il faudrait pour résoudre mon pb  : c'est trouver comment passer d'un fichier plein de lignes doublon comme par exemple

toto
toto
toto
tata
tata
tutu
tutu
tutu
tutu
titi

à un fichier comme ça :

toto
tata
tutu
titi

donc un fichier sans ligne qui doublonne.

Mais ça je ne sais pas comment faire.


un fixe DELL, 1 laptop LDLC et 1 laptop Lenovo, tous en 16.04.3 LTS - 64 bits

Hors ligne

#6 Le 10/10/2019, à 17:36

kamaris

Re : (résolu) lister les dossiers modifiés depuis un certain temps

Eh bien, tu te reportes à ma réponse précédente, c'est indiqué…

Hors ligne

#7 Le 10/10/2019, à 17:50

pingouinux

Re : (résolu) lister les dossiers modifiés depuis un certain temps

Bonjour,
Attention : uniq ne supprime les doublons que si les lignes identiques sont consécutives.

sort fichier | uniq

Hors ligne

#8 Le 10/10/2019, à 18:08

nany

Re : (résolu) lister les dossiers modifiés depuis un certain temps

Bonjour,



pingouinux a écrit :

Attention : uniq ne supprime les doublons que si les lignes identiques sont consécutives.

sort fichier | uniq

Si tel est le cas, pourquoi utiliser uniq ?

sort -u fichier

Le mot de passe sudo ne s'affiche pas
Comment bien utiliser les balises BBcode
LIBRARIES ARE NOT BOOK-STORES! − Une souris, des souris. Un souci, des soucis. Une énigme résolue, un problème résolu.
J’ai forké le compteur-couche-tard.

En ligne

#9 Le 10/10/2019, à 18:15

kamaris

Re : (résolu) lister les dossiers modifiés depuis un certain temps

Bien vu pingouinux, après vérification sur un cas de test un peu conséquent, même en ne regardant que les répertoires, des doublons peuvent perdurer dans ce que j'ai donné en #4.
En prenant en compte l'interrogation de nany en #8 que je partage, ce que j'ai donné en #4 devient donc

find $HOME -name '.*' -prune -o -type f -mtime -3 -printf '%h\n' | sort -u

où le -type f est donc optionnel comme déjà dit.

Hors ligne

#10 Le 10/10/2019, à 18:54

pingouinux

Re : (résolu) lister les dossiers modifiés depuis un certain temps

@nany #8 : Tu as évidemment raison

Hors ligne

#11 Le 10/10/2019, à 20:14

cristobal78

Re : (résolu) lister les dossiers modifiés depuis un certain temps

En suivant vos bons smile  conseils je suis arrivé à ça :

# liste des fichiers trouvés
find $HOME -name '.*' -prune -o -type f -mtime -3 -print >> listefic

# dans quels répertoires les fichiers modifiés se trouvent-ils ?
while read var
	do
 	echo "${var%/*}" >>listerep
done < listefic

# affichage de la liste des rértoires
cat listerep |sort -u | zenity --width=800 --height=1000 --list --title="" --text="*** RÉSULTATS ***" --column="Liste des RÉPERTOIRES dont le contenu a été modifié sur une période de 3 fois 24hrs avant aujourd'hui à $(date +%H:%M) hrs"

rm listefic listerep

Je ne sais pas si c'est beau ou laid comme code mais ça marche impec !!! smile

Merci à tous


un fixe DELL, 1 laptop LDLC et 1 laptop Lenovo, tous en 16.04.3 LTS - 64 bits

Hors ligne

#12 Le 10/10/2019, à 20:25

kamaris

Re : (résolu) lister les dossiers modifiés depuis un certain temps

Eh bien décidément, tu ne veux pas utiliser ce que je t'ai donné en #4 et corrigé en #9.
Je vais quand même signaler pour finir que tout ton

# liste des fichiers trouvés
find $HOME -name '.*' -prune -o -type f -mtime -3 -print >> listefic

# dans quels répertoires les fichiers modifiés se trouvent-ils ?
while read var
	do
 	echo "${var%/*}" >>listerep
done < listefic

# affichage de la liste des rértoires
cat listerep |sort -u

équivaut à mon

find $HOME -name '.*' -prune -o -type f -mtime -3 -printf '%h\n' | sort -u

et qu'il te suffit donc de faire

find $HOME -name '.*' -prune -o -type f -mtime -3 -printf '%h\n' | sort -u | zenity --width=800 --height=1000 --list --title="" --text="*** RÉSULTATS ***" --column="Liste des RÉPERTOIRES dont le contenu a été modifié sur une période de 3 fois 24hrs avant aujourd'hui à $(date +%H:%M) hrs"

Hors ligne

#13 Le 11/10/2019, à 00:21

cristobal78

Re : (résolu) lister les dossiers modifiés depuis un certain temps

bonsoir cher kamaris

Ce n'est pas que je ne voulais pas utiliser ta proposition, que d'ailleurs j'ai testée et qui marche  smile smile smile ,    mais c'est que je n'arrivais pas vraiment à la comprendre.  sad
Comme je comptais incorporer tout ça dans un script il fallait que je sois sûr que dans un mois, dans un an ou plus encore, je comprenne parfaitement l'articulation de cette ligne.

Donc je me suis rabattu sur du nettement moins élégant   roll  mais que je suis sûr de comprendre dans le futur, car améliorer, faire évoluer et maintenir un script implique qu'on en maîtrise parfaitement chaque ligne.

Qu'est ce que je ne comprends pas bien dans ta ligne de cde :

- pourquoi printf et non print  ?
- la lecture du man find, particulièrement touffu et pénible comme c'est souvent le cas avec le man, m'a conduit à supposer que %h permet de ne garder que le chemin sans le nom du fichier au bout. C'est bien ça ?
- \n pour moi c'est un "retour chariot". Pourquoi est-il là puisque ma cde initiale

find $HOME -name '.*' -prune -o -type f -mtime -3 -print

qui ne contient pas de \n effectue d'elle même le renvoi à la ligne suivante ?


un fixe DELL, 1 laptop LDLC et 1 laptop Lenovo, tous en 16.04.3 LTS - 64 bits

Hors ligne

#14 Le 11/10/2019, à 00:58

kamaris

Re : (résolu) lister les dossiers modifiés depuis un certain temps

Eh bien je dirais que tu as tous les éléments de réponse dans ta question.
C'en est d'ailleurs à ce point que je ne sais pas trop quoi te dire pour t'expliquer ce que tu m'expliques quasiment toi-même dans cette question.

Effectivement, le « %h permet de ne garder que le chemin sans le nom du fichier au bout. » C'est à dire exactement ce que tu veux.
Ensuite il faut lui mettre un \n car printf, contrairement à print, ne le met pas tout seul (print est un cas particulier de printf), mais c'est un détail.
Car, l'intérêt ? C'est là que je m'étonne que tu ne comprennes pas : ça remplace juste tout ton code que tu mets à la place.
En particulier toute cette opération

while read var
	do
 	echo "${var%/*}" >>listerep
done < listefic

est contenue dans le simple « %h ».
Alors que tu viennes me dire que ton problème, c'est d'avoir à rajouter un \n que tu n'avais pas à mettre avec print, j'avoue que ça me sidère un peu.

Hors ligne

#15 Le 11/10/2019, à 01:55

cristobal78

Re : (résolu) lister les dossiers modifiés depuis un certain temps

C'est clair.
Je te remercie et passe en "résolu"


un fixe DELL, 1 laptop LDLC et 1 laptop Lenovo, tous en 16.04.3 LTS - 64 bits

Hors ligne

#16 Le 11/10/2019, à 11:07

credenhill

Re : (résolu) lister les dossiers modifiés depuis un certain temps

hello

cristobal78 a écrit :

c'est trouver comment passer d'un fichier plein de lignes doublon comme ...
donc un fichier sans ligne qui doublonne.
.

sans sort, sans changer l'ordre

$ awk '!t[$0]++' fichier
toto
tata
tutu
titi

En ligne

#17 Le 11/10/2019, à 12:00

kamaris

Re : (résolu) lister les dossiers modifiés depuis un certain temps

Effectivement, c'est bien dommage de faire un sort juste pour enlever des doublons, alors qu'un comptage suffit.
Mais en fait, il suffit de compter une seule occurrence, on doit donc encore pouvoir faire des économies :

awk '!t[$0] {t[$0]++; print}' fichier

Hors ligne

#18 Le 11/10/2019, à 17:40

LeoMajor

Re : (résolu) lister les dossiers modifiés depuis un certain temps

bonjour,

lister les dossiers modifiés ... en temps réel

 while read; do echo "$REPLY"; echo "dossier:${REPLY%/*}"; done < <(inotifywait -m --timefmt '%M:%S' --format '%T:%e:%w%f' -e modify,close_write  -r $HOME)

Hors ligne