Page 3 sur 3

Re: Commande "touch" ... ou équivalent sur une arborescence

Posté : lun. 17 juil. 2017 20:49
par tioker

Dernier message de la page précédente :

Pour la beauté ... de l'écriture (ou de la plume).
1- effectivement la commande "date" a l'air d'avoir un comportement pas toujours fiable
2- la commande touch avec son option -t nécessite les heures et minutes (dixit touch --help). Mais bon, on peut compléter effectivement.
3- regEx ... allez, je me lance, ou plutôt je plonge. Une bonne musique sur les oreilles, une paire de lunettes bien nettoyées, on va trouver.

A plus

Re: Commande "touch" ... ou équivalent sur une arborescence

Posté : lun. 17 juil. 2017 20:59
par arghlub
tioker a écrit : 2- la commande touch avec son option -t nécessite les heures et minutes (dixit touch --help). Mais bon, on peut compléter effectivement.
Ben ouais, à compléter en auto avec 0000 par exemple, histoire de pas se prendre la tête avec les 24 heures... (vu que tu renommes des répertoires entiers, c'est pas à la minute près il me semble)

Re: Commande "touch" ... ou équivalent sur une arborescence

Posté : lun. 17 juil. 2017 22:12
par tioker
J'ai lu ton code

Code : Tout sélectionner

dateRegEx="^[0-9]{4}(0[0-9]|1[0-2])([0-2][09]|3[0-1])[0-2][0-9][0-5][0-9]"
et en croisant avec la documentation (http://www.linux-france.org/article/web ... regexp.php) j'ai compris.
Comme tu le dis ça ne contrôle pas du tout la date, seulement sa forme. Avec ce contrôle on peut mettre 31 jours à tous les mois, ou "00" dans les mois et les jours. J'ai préféré une formulation plus longue mais plus juste (je ne traite pas les heures, mais c'est le même principe)

Code : Tout sélectionner

^[0-9]{4}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])$
Pour la fonction date, je n'ai pas réussi à la mettre en erreur quand je la traite en deux temps: date puis heure.
Donc, pour le fun, je vais mettre la version regEx en commentaire dans la procédure pour la garder à mes bons souvenirs.
Quand à la boucle if ou while ... là je sature; je m'y remettrais plus tard.
Merci à toi/vous et ne m'oubliez pas pour la documentation ... récente.

Anecdote: ce matin j'ai buté sur un simple echo et read. Le message était "identifiant non valable". :evil: Je me suis arraché [le peu] des cheveux [qu'il me reste] pour comprendre :idea: que, sous Linux [Mint], mieux vaut utiliser un éditeur comme vi ou nano car le notepad de l'interface graphique doit mettre des caractères invisibles foireux. Une fois tout ressaisi sous Terminal, j'ai retrouvé mes esprits :mrgreen: . Ca m'a rappelé le même problème d'il y a ... plus de 15 ans sous Unix; caractère foireux qu'on ne voit pas.

Re: Commande "touch" ... ou équivalent sur une arborescence

Posté : lun. 17 juil. 2017 22:31
par arghlub
excuse ma regEx était tapée au kilomètre... je l'avais pas vérifié et savais qu'elle comporterait certainement des erreurs (les voies de la regEx sont impénétrables! :D ).
Il me semble qu'il y aurait moyen de tout contrôler en faisant appel à des variables de calendrier mais là ça devient infernal et moins Kisss.
******
Par rapport aux éditeurs de texte en CLI, perso je suis emacs pas vi (sujet à polémique ne rentrons pas dedans, chacun ses gouts). Ceci dit y'a d'excellent editeur en GUI (interface graphique) qui ne touche pas au bordel (je pense à Atom, BlueFish, Brackets).... Depuis quelques mois je suis avec Atom (editeur de texte lancé par GitHub, très intéressant...)

Ceci dit, je pense que le sujet est clos (il me semble que l'exercice était intéressant) si tu veux bien partager ton code en open-source pour ceux que cela pourrait intéresser...
;)

Re: Commande "touch" ... ou équivalent sur une arborescence

Posté : lun. 17 juil. 2017 23:49
par tioker
arghlub a écrit :si tu veux bien partager ton code en open-source pour ceux que cela pourrait intéresser...
;)
Mon code définitif [?] avec P1 et P2 optionnels, HHMM aussi.
J'ai fait du KISS.
Quand tu dis partage en openSource (camelCase), c'est la même chose que j'ai fait précédemment (zerobin) ?
Sinon code.

Code : Tout sélectionner

#!/bin/bash
#
#-------------------------Change the date of folder (and sub-folder) and associated files
#-------------------------$1 = ftbm = folder to be modified
#-------------------------$2 = dta = date (YYYYMMDD[HHMM]) to apply
#
#------------------------- Constantes 
#
libOk="valide"; libKo="**non valide**"; libEmpty="vide"; lib0="repertoire"; lib1="heure "; lib2="date "
#
#--------------------------Test de la variable $1 et $2
#
ftbm="$1"
while ( test -z "$ftbm" ); do read -p "$lib0 $libOk :" ftbm; done
dta="$2"
while ( test -z "$dta" ); do read -p "$lib2 $libOk :" dta; done
#
#--------------------------Does the folder exists ?
#
test -d "$ftbm" -a ! -L "$ftbm"
if (( "$?" > 0 )); then echo "$lib0 $ftbm $libKo"; exit; fi
#
#------------------------- Date control (in 2 times, bug in "date" fonction ?)
#------------------------- If HHMM is omitted, initialized to 0000
#
d1=$(echo "$dta" | cut -c 1-8)
date -d "$d1" +"%Y%m%d"
if (( "$?" > 0 )); then echo "$lib2 $d1 $libKo"; exit; fi
t1=$(echo "$dta" | cut -c 9-12)
if ( test -z "$t1" ); then t1="0000"; fi
date -d "$t1" +"%H%M"
if (( "$?" > 0 )); then echo "$lib1 $t1 $libKo"; exit; fi
dta="$d1$t1"
#
#------------------------- Lanch the command !
#
find "$ftbm" -exec touch -t "$dta" {} \;
ls "$ftbm" -lR
letMeKnow, goodNight, sleepWell ...
En cadeau, ce que j'écoute en découvrant le shell ==> https://youtu.be/-GZTyVraYJo

Re: Commande "touch" ... ou équivalent sur une arborescence

Posté : mar. 18 juil. 2017 02:00
par arghlub
Merci pour le partage de ton code (et avec commentaires internationalisés en franglais, thank you monsieur! ;) je taquine... par rapport au 2ème comment “Variables test”)
tioker a écrit :En cadeau, ce que j'écoute en découvrant le shell ==> https://youtu.be/-GZTyVraYJo
Youn Sun Nah... Très bon ... un peu épileptique mais très bon...
À faire découvrir aux autres dans le sujet La boîte musicale
;)
;)

Re: Commande "touch" ... ou équivalent sur une arborescence

Posté : mar. 18 juil. 2017 02:23
par arghlub
Par contre, petit détail, je pense qu'il devrait y avoir un petit problème au niveau de la variable “libOk”....
Lors de la déclaration, tu le fais en camelCase “libOk” mais quand tu l'appelles, tu changes la casse du K : “$libOK” donc d'après moi ça devrait bugué.
;)

Re: Commande "touch" ... ou équivalent sur une arborescence

Posté : mar. 18 juil. 2017 09:02
par tioker
De l'utilité de rédiger un scénario de test et un cahier de recette.
J'ai perdu mes réflexes (j'ai travaillé en infogérance des années).
J'ai corrigé; merci.