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.

#26 Le 05/01/2014, à 11:57

pingouinux

Re : [résolu] trouver les derniers fichiers modifiés (sans les fich cachés)

cristobal78 #25 a écrit :

mais ne me disait pas que le fichier " /home/user/banque/relevés-2013.ods" avait été modifié.

C'est normal, le nom du fichier contient un point
/home/user/banque/relevés-2013.ods
Il aurait fallu que tu fasses

find $HOME -regex $HOME'/[^.].+' -mtime -$nbrejours

Ajouté :
Mais l'option -prune suggérée par Postmortem est préférable

Dernière modification par pingouinux (Le 05/01/2014, à 12:06)

Hors ligne

#27 Le 05/01/2014, à 13:39

credenhill

Re : [résolu] trouver les derniers fichiers modifiés (sans les fich cachés)

hello

@Postmortem

Postmortem a écrit :

Essaie ceci :

var=toto echo "var vaut $var"

L'expansion des paramètres (et autres expansions) a lieu avant l'affectation des variables. Les affectations comme cela sont utilisées une fois que l'execution se fait.

il me semble que $var est résolu avant l'exécution de var=toto

$ unset var
$ var=toto echo "var vaut $var"
var vaut 
$ # alors que :
$ unset var
$ var=toto awk 'BEGIN {print "var vaut " ENVIRON["var"]}'
var vaut toto

ou y a-t-il un paramètre du shell à modifier ?

Hors ligne

#28 Le 05/01/2014, à 14:43

cristobal78

Re : [résolu] trouver les derniers fichiers modifiés (sans les fich cachés)

$ var=toto echo "var vaut $var"

ne serait-ce pas  plutot :

$ var=toto ; echo "var vaut $var"


Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE

Hors ligne

#29 Le 05/01/2014, à 15:04

Postmortem

Re : [résolu] trouver les derniers fichiers modifiés (sans les fich cachés)

credenhill a écrit :

hello

@Postmortem

Postmortem a écrit :

Essaie ceci :

var=toto echo "var vaut $var"

L'expansion des paramètres (et autres expansions) a lieu avant l'affectation des variables. Les affectations comme cela sont utilisées une fois que l'execution se fait.

il me semble que $var est résolu avant l'exécution de var=toto

$ unset var
$ var=toto echo "var vaut $var"
var vaut 
$ # alors que :
$ unset var
$ var=toto awk 'BEGIN {print "var vaut " ENVIRON["var"]}'
var vaut toto

ou y a-t-il un paramètre du shell à modifier ?

Salut,
Oui oui, c'était justement un exemple pour expliquer pourquoi une commande donnée précédemment n'était pas juste.


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

Hors ligne

#30 Le 05/01/2014, à 16:23

credenhill

Re : [résolu] trouver les derniers fichiers modifiés (sans les fich cachés)

cristobal78 a écrit :

$ var=toto echo "var vaut $var"
ne serait-ce pas  plutot :
$ var=toto ; echo "var vaut $var"

avec ; on a 2 commandes, sans on definit var temporairement uniquement pour la commande qui suit

$ unset var
$ var=tata
$ var=toto awk 'BEGIN {print "var vaut " ENVIRON["var"]}'
var vaut toto
$ echo $var
tata
$ 

Hors ligne

#31 Le 06/01/2014, à 01:40

cristobal78

Re : [résolu] trouver les derniers fichiers modifiés (sans les fich cachés)

@ pingouinux  post #26

Je n'avais pas pensé au . devant ods !!!
Mais j'avais cru comprendre que dans l'expression '/[^.].+' le ^. voulait dire "ne commençant pas par .", or le point devant ods n'est pas en premier caractère du nom du fichier.
J'ai pris l'option -prune pour mon script.
On va voir à l'usage.
Je repasse en "résolu" smile
Merci à tous.


Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE

Hors ligne

#32 Le 06/01/2014, à 06:04

pingouinux

Re : [résolu] trouver les derniers fichiers modifiés (sans les fich cachés)

cristobal78 #31 a écrit :

Mais j'avais cru comprendre que dans l'expression '/[^.].+' le ^. voulait dire "ne commençant pas par ."

Ton expression qui ne marche pas est elle-ci (premier find dans ton script en #16)

		sudo find $HOME -regex "[^.]*"  -mtime -$nbrejours

"[^.]*" : zéro ou un nombre quelconque de caractères différents du point

Dernière modification par pingouinux (Le 06/01/2014, à 06:04)

Hors ligne

#33 Le 06/01/2014, à 12:24

cristobal78

Re : [résolu] trouver les derniers fichiers modifiés (sans les fich cachés)

1/- quand je fais : find $HOME -regex "[^.]*"  -mtime -1
j'obtiens
/home/moi
/home/moi/perso_ubuntu/maison
/home/moi/mes_scripts
/home/moi/mes_scripts/last-modified~
/home/moi/mes_scripts/last-modified
ce qui est sûrement juste car je n'ai rien modifié comme fichier depuis 24 hrs, sauf que je ne vois pas le fichier "intsight2.odt" qui a bien été modifié il y a moins d'un jour (il y a 11 heures, pour être précis)

2/- quand je fais : find  $HOME -name '.*' -prune -o -type f -mtime -1 -print
j'obtiens
/home/moi/perso_ubuntu/maison/intsights2.odt .............cette fois je vois le fichier "intsight2.odt"  smile
/home/moi/mes_scripts/last-modified~
/home/moi/mes_scripts/last-modified

3/- quand je fais : find $HOME -regex '[^.].+'  -mtime -1
j'obtiens des dizaines de lignes dont celles correspondant à des répertoires cachés (commençant par ".")
/home/moi/.thunderbird ...
/home/moi/.mozilla/firefox ...
/home/moi/.cache ...
/home/moi/.local/share ...
/home/moi/.config ...
/home/moi/.thumbnail ...
etc..etc... (donc pas du tout ce que je veux !!)

et à la toute fin de la liste je retrouve enfin :

/home/moi/perso_ubuntu/maison
/home/moi/perso_ubuntu/maison/intsights2.odt
/home/moi/mes_scripts
/home/moi/mes_scripts/last-modified~
/home/moi/mes_scripts/last-modified

Conclusion
Donc apparemment le meilleur choix serait  le 2/- (avec -prune)

Que veut dire '[^.] .+'  en particulier le   .+

Dernière modification par cristobal78 (Le 06/01/2014, à 12:35)


Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE

Hors ligne

#34 Le 06/01/2014, à 12:42

gigiair

Re : [résolu] trouver les derniers fichiers modifiés (sans les fich cachés)

cristobal78 a écrit :

quand je fais : find $HOME -regex '[^.].+'  -mtime -1
jobtiens des dizaines de lignes dont celles correspondant à des répertoires cachés
/home/moi/.thunderbird ...
/home/moi/.mozilla/firefox ...
/home/moi/.cache ...
/home/moi/.local/share ...
/home/moi/.config ...
/home/moi/.thumbnail ...
etc..etc...
donc pas du tout ce que je veux.

que veut dire '[^.] .+'  en particulier le   .+

Les regexp utilisées par find sont par défaut celles de Emacs.
La description précise est donnée dans le fichier info de Emacs (s'il est présent sur ton installation)
mais on doit aussi pouvoir la trouver sur le ouaibe.
. remplace n'importe quel caractère et * ou + sont des opérateurs de répétition * répète le modèle un nombre entier de fois (0, 1,...} et + au moins une fois.
Ainsi .* capture toutes les chaînes de caractère, même vides, et .+ seulement les chaînes de caractère qui contiennent au moins un caractère.
Le motif '[^.] .+'  capture donc toutes les chaînes de caractère ne commençant pas par un point et suivies d'au moins un caractère. Comme celles de $HOME commencent toutes par /, tout est capturé.


--
JJR.

Hors ligne

#35 Le 06/01/2014, à 13:01

Postmortem

Re : [résolu] trouver les derniers fichiers modifiés (sans les fich cachés)

Pour préciser les propos de gigiair, il faut savoir que -regex cherche à faire la correspondance sur le chemin complet de chaque fichier que find rencontre.
Donc, si tu fais find $HOME -regex '[^.].+', il est normal que cela te renvoie toute l'arbo de $HOME ; en effet, l'expression -regex '[^.].+' est comparé, par exemple, à /home/ton_nom/rep/fichier et donc, cette expression est toujours vraie.

Contrairement à -regex, -name ne teste que le nom du fichier/dossier ; par exemple, find $HOME -name '[^.]*' t'affichera bien les fichiers/dossiers ne commençant pas par point (mais ces fichiers/dossiers ne commençant pas par point peuvent très bien être dans un dossier qui lui commence par point !)

Autre différence entre -regex et -name, le premier utilise des expressions rationnelles alors que le second utilise des "pattern".


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

Hors ligne

#36 Le 06/01/2014, à 15:23

cristobal78

Re : [résolu] trouver les derniers fichiers modifiés (sans les fich cachés)

merci de ces précisons. Ce n'est pas simple cette affaire ! smile


Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE

Hors ligne

#37 Le 10/01/2014, à 12:38

EricG

Re : [résolu] trouver les derniers fichiers modifiés (sans les fich cachés)

Bonjour,

J'ajoute ma version, mais qui est encore en chantier parce que j'ai pioché ici où là comment faire.

En gros : le script demande un mot de passe root pour explorer des dossiers à autorisation;
c'est limité à certains fichiers par les extensions;
je vise un dossier même si à la base c'est depuis la racine / ;
Certains dossiers sont exclus, repèrez les ! path, dans le dossier ciblé précédemment ;
Enfin, je crée un fichier dans lequel il est écrit les noms des fichiers, les chemins et la date de dernière modification.


#!/bin/bash

#	sudo find /
#	En mode root pour avoir les autorisations sur l'ensemble du disque, à la racine.

#	\( -iname "*.jpg" -or -iname "*.txt" \)
#	-or -iname "*.txt" est la partie à répéter pour d'autres extensions
#	Sans accorder de l'importance à la casse
#	Si le fichier a pour extension jpg ou txt...

#	-and -mtime -100
#	Et qui à moins de 100 jours.

#	! -path "/home/ericgbnew/.sauvegardes/*"
#	A l'exception du dossier... On peut dupliquer cette partie.

#	-printf "\n%f\n%h\ndernier accès : %AA %Ad %AB %AH:%AM\n"
#	On formate le résultat : retour(doublé donc saut de ligne), fichier..., retour, chemin..., retour 
#	"Dernier accès", toujours au moins %A : le jour, le numéro, le mois, l'heure, les minutes, retour.

#	> ~/Bureau/"Derniers accès aux fichiers Résultats.txt"
#	Et on sauvegarde dans un fichier.

zenity --entry  --text="Mot de passe ?" --hide-text \ | (

rm ~/Bureau/"Accès aux fichiers.txt"
sleep 3

sudo -S find / \( -iname "*.jpg" -or -iname "*.txt" -or -iname "*.html" -or -iname "*.css" -or -iname "*.odt" -or -iname "*.ods" -or -iname "*.pdf" -or -iname "*.png" -or -iname "*.odg" -or -iname "*.rtf" -or -iname "*.xcf" -or -iname "*.gz" -or -iname "*.epub" -or -iname "*.txt" -or -iname "*.txt" \) -and -mtime -10 -path "/home/ericgbnew/*" ! -path "/home/ericgbnew/.local/*" ! -path "/home/ericgbnew/.thumbnails/*" ! -path "/home/ericgbnew/.mozilla/*" ! -path "/home/ericgbnew/.sauvegardes/*" ! -path "/home/ericgbnew/.cache/*" -printf "\n%f\n%h\ndernier accès : %AA %Ad %AB %AH:%AM\n" > ~/Bureau/"Accès aux fichiers.txt"

)

Hors ligne

#38 Le 10/01/2014, à 17:49

Postmortem

Re : [résolu] trouver les derniers fichiers modifiés (sans les fich cachés)

Salut,

@EricG :
Ta solution n'est pas très optimisée on va dire !

En effet, tu fais une recherche à partir de la racine alors que plus tard dans la commande, tu utilises -path "/home/ericgbnew/*". find va donc scanner TOUTE ton arbo et écarter un par un les fichiers/dossiers ne correspondant pas à "/home/ericgbnew/*".

Pareil pour les répertoires que tu exclus avec les tests du type ! -path "/home/ericgbnew/.local/*". find rentre tout de même dans ces dossiers et pour chaque fichier/sous-dossier qu'il y trouve, il les écarte. D'où l’intérêt de -prune qui empêche de descendre dans les répertoires.

Je remplacerais donc ta commande find par celle-ci :

find /home/ericgbnew \( -path /home/ericgbnew/.local -o -path /home/ericgbnew/.thumbnails -o -path /home/ericgbnew/.mozilla -o -path /home/ericgbnew/.sauvegardes -o -path /home/ericgbnew/.cache \) -prune -o \( -iname "*.jpg" -o -iname "*.txt" -o -iname "*.html" -o -iname "*.css" -o -iname "*.odt" -o -iname "*.ods" -o -iname "*.pdf" -o -iname "*.png" -o -iname "*.odg" -o -iname "*.rtf" -o -iname "*.xcf" -o -iname "*.gz" -o -iname "*.epub" -o -iname "*.txt" -o -iname "*.txt" \) -mtime -10 -printf "\n%f\n%h\ndernier accès : %AA %Ad %AB %AH:%AM\n" > ~/Bureau/"Accès aux fichiers.txt"

Déjà, la recherche n'est effectuée que dans /home/ericgbnew (sudo n'est donc plus obligatoire).
Puis on cherche d'abord les dossiers à exclure ; sur ces dossiers, l'action -prune est effectuée, donc find ne les scanne pas.
Seulement ensuite, on va chercher les fichiers correspondant aux extensions voulues et on vérifie qu'ils ont été modifiés il y a moins de 10 jours.

Et pour simplifier encore, on variabilise et on remplace les -iname et -path par -(i)regex :

# Liste des extensions à rechercher
extensions='jpg\|txt\|html\|css\|odt\|ods\|pdf\|png\|odg\|rtf\|xcf\|gz\|epub'

# Liste des répertoires à exclure (chemin complet sans la partie $HOME/) ; penser à protéger les caractères spéciaux à une expression rationelle (le point par exemple) :
exclu='\.local\|\.thumbnails\|\.mozilla\|\.sauvegardes\|\.cache'

find "$HOME" -regex "$HOME/\($exclu\)" -prune -o -iregex ".*\.\($extensions\)" -mtime -10 -printf "\n%f\n%h\ndernier accès : %AA %Ad %AB %AH:%AM\n" > ~/Bureau/"Accès aux fichiers.txt"

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

Hors ligne

#39 Le 10/01/2014, à 20:35

cristobal78

Re : [résolu] trouver les derniers fichiers modifiés (sans les fich cachés)

Hi all,

bien que mon pb soit résolu je regarde la proposition (voisine) de EricG.
Toujours intéressant de voir les idées des autres. smile

- Mais qd j'essaie ça :
zenity --entry  --text="Mot de passe ?" --hide-text \ | (
ça ne donne rien.
Par ailleurs que signifie la "(" en fin de ligne précédée de "|"     ?

- Si on réduit la ligne à :
zenity --entry  --text="Mot de passe ?" --hide-text

et que j'entre par exemple "123" comme mot de passe, celui ci, certes caché dans la box zenity, apparaît en clair dans le terminal.
Du coup à quoi sert le "hide-text"   ?


Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE

Hors ligne

#40 Le 11/01/2014, à 12:11

EricG

Re : [résolu] trouver les derniers fichiers modifiés (sans les fich cachés)

Bonjour,

Merci à postmortem pour ses corrections très instructives sur un script à l'image du fait que je ne savais pas exactement ce que je voulais. Il y avait tout, d'où son intérêt relatif pour quelques visiteurs, mais avec avec ces corrections indispensables. Je vais étudier ça avec gourmandise et peut être que je vais éclater tout ça déjà, à vue de nez.

Pour Cristobal, il faut que zenity soit installé.
D'autre part, c'est aussi du copier/coller et il y a sans doute des détails superflus, voir déconseillés.
Dernier point, je n'ai pas le réflexe du terminal en guise d'interface, d'où zenity.
Avec Linux, je me suis familiarisé à les lignes de commandes, puis les scripts transparents.

Pour zenity, on se débrouiller avec help.gnome.org et doc.ubuntu-fr

Hors ligne

#41 Le 11/01/2014, à 16:15

cristobal78

Re : [résolu] trouver les derniers fichiers modifiés (sans les fich cachés)

@ ericG

zenity est actif chez moi comme l'indique mon script visible au post #16 du fil.

Ce n'est donc pas la raison de mon échec à utiliser la commande
zenity --entry  --text="Mot de passe ?" --hide-text \ | (

La commande modifiée, c-à-d sans " \ | ("  marche comme je l'ai également dit, mais là ma question était surtout : pourquoi "--hide" puisque le mot de passe apparaît en clair dans le terminal ?


Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE

Hors ligne

#42 Le 12/01/2014, à 10:30

EricG

Re : [résolu] trouver les derniers fichiers modifiés (sans les fich cachés)

Bonjour,

Chez moi, ce script est sous forme d'un fichier exécutable qui se manifeste avec la boîte d'entrée de mot de passe. logiquement, pour moi, Hide fait en sorte que des points apparaissent en lieu et place du véritable mot de passe pour qu'il ne soit pas lisible. Si tu veux utiliser le terminal, oublie Zenity.

Hors ligne

#43 Le 12/01/2014, à 10:43

pingouinux

Re : [résolu] trouver les derniers fichiers modifiés (sans les fich cachés)

Bonjour,
Le mot de passe est caché dans la fenêtre zenity, mais sort comme prévu sur la sortie standard. Le mot de passe n'apparaît pas dans le terminal si tu fais ceci :

 mdp=$(zenity --entry  --text="Mot de passe ?" --hide-text)

ou

zenity --entry  --text="Mot de passe ?" --hide-text | ( commande dont l'entrée standard est le mot de passe )

Le "\" est inutile "|" suffit.

Hors ligne