#1 Le 05/07/2016, à 21:02
- arno_lupin
[résolu] Bash : trouver les derniers fichiers ou répertoires modifiés
Salut à tous,
Je cherche à savoir si il y a eu une modification sur un dossier et toute son arborescence et, si oui, afficher les dernières modifications.
J'ai creuser la piste de "find -mtime" avec un "head" ou un "tail" en pipe mais find ne semble pas classer les fichiers et les dossiers de la bonne façon. Il affiche tout un peu en désordre.
Je précise que je ne suis pas tout à fait un nouveau venu de la ligne de commande ou des scripts, mais je suis loin d'être un cador.
Dernière modification par arno_lupin (Le 06/07/2016, à 11:35)
Ubuntu 20.04.1 LTS (Focal Fossa) 64-bit .. MATE 1.24.0
Hors ligne
#2 Le 05/07/2016, à 21:33
- pingouinux
Re : [résolu] Bash : trouver les derniers fichiers ou répertoires modifiés
Bonsoir,
Pour voir les fichiers modifiés le plus récemment :
shopt -s globstar
ls -ltd **/* # Récemment modifiés en tête
ls -lrtd **/* # Récemment modifiés en queue
Tu peux coupler ces commandes avec head ou tail.
Pour voir aussi les fichiers cachés, remplace la première ligne par :
shopt -s dotglob globstar
Hors ligne
#3 Le 05/07/2016, à 22:42
- arno_lupin
Re : [résolu] Bash : trouver les derniers fichiers ou répertoires modifiés
C'est une solution rapide et élégante!
Je suis impressionné, je ne connaissais pas du tout "shopt".
Peux-tu m'en dire plus ? Que sont les variables qu'il gère ? des variables du bash, un peu comme $PWD ?
J'aime bien comprendre...
Par contre, il me manque l'option "-mtime" de "find"...
Mon objectif final est de vérifier l'activité sur un dossier et ses multiples sous-dossiers et si il y eu une activité de lancer une sauvegarde périodique.
Et bien sûr, d'afficher cette activité avec le "ls -lrtd"...
Merci beaucoup, je pense que cela va m'être très utile.
Ubuntu 20.04.1 LTS (Focal Fossa) 64-bit .. MATE 1.24.0
Hors ligne
#4 Le 06/07/2016, à 01:10
- arno_lupin
Re : [résolu] Bash : trouver les derniers fichiers ou répertoires modifiés
Je pourrais certainement faire un truc du genre :
varTest=$(find ~/monRépertoire/ -mmin -1441 | head -1 ) # 1441 min c'est un jour + 1 min
if [ "$varTest" != "" ]; then
shopt -s globstar
ls -ltd **/* | head -20
shopt -u globstar # pour tout remettre par défaut
...
LANCER MA SAUVEGARDE
...
fi
mais je trouve que ma variable "$varTest" est vraiment bizarre. Je lance une commande qui peux lister un nombre énorme de fichiers pour l'utiliser comme booléen.
... ça me crispe un peu...
Quelqu'un a mieux ?
Ubuntu 20.04.1 LTS (Focal Fossa) 64-bit .. MATE 1.24.0
Hors ligne
#5 Le 06/07/2016, à 05:30
- pingouinux
Re : [résolu] Bash : trouver les derniers fichiers ou répertoires modifiés
Peux-tu m'en dire plus ? Que sont les variables qu'il gère ? des variables du bash, un peu comme $PWD ?
shopt est une "builtin command" de bash.
Voir man bash -> SHELL BUILTIN COMMANDS -> shopt.
Pour avoir la list des variables gérées et leur valeur :
shopt # Pour l'ensemble des variables
shopt dotglob globstar # Pour des variables particulières
shopt -s globstar ls -ltd **/* | head -20 shopt -u globstar # pour tout remettre par défaut
Pour revenir à l'ancienne valeur, il faut l'avoir sauvegardée, car ce n'est pas forcément off :
# Pour la sauvegarde
globstar_old=$(shopt globstar|awk '{if($2=="on")print "-s";else print "-u"}')
........................................................................
#Pour restaurer la valeur
shopt $globstar_old globstar
Tu peux te contenter de faire
if [ "$varTest" ]; then
Édité :
Tu peux aussi faire ainsi :
varTest=$(find ~/monRépertoire/ -mmin -1441 | wc -l)
if [ "$varTest" != "0" ]; then
Dernière modification par pingouinux (Le 06/07/2016, à 06:23)
Hors ligne
#6 Le 06/07/2016, à 11:34
- arno_lupin
Re : [résolu] Bash : trouver les derniers fichiers ou répertoires modifiés
Merci beaucoup pingouinux !
Tu réponds parfaitement à mes questions.
Je vais me pencher sur "shopt", c'est très intéressant de pouvoir manipuler le comportement du bash.
Je marque ce sujet comme [résolu].
Ubuntu 20.04.1 LTS (Focal Fossa) 64-bit .. MATE 1.24.0
Hors ligne