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

Questions concernant les lignes de commandes
Avatar du membre
tioker
Messages : 234
Enregistré le : sam. 6 mai 2017 00:33
Localisation : Anjou...Feu !
Contact :

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

Messagepar tioker » lun. 17 juil. 2017 20:49

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
Linux Mint 18.3 Cinnamon 64 bits sur Dell Optiplex 790 - Intel I3-2120 3.2ghz
Sinon: Windows 7/10, NAS Synology, compte Google Drive, Chromebase, Chromebook, Chromecast, IOS

Avatar du membre
arghlub
modérateur
Messages : 3126
Enregistré le : dim. 21 mai 2017 08:19
Localisation : Provence

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

Messagepar arghlub » lun. 17 juil. 2017 20:59

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)
Portable • Lenovo G50-80 LinuxMint 18.3 XFCE 4.12.3
Tour (custom)CM MSI Z270 Gaming M3 | CPU Intel I7-7700K | CG MSI Nvidia GTX 1080 | RAM 16Go DDR4 3000MHz | Debian 9 XFCE 4.12.3 (+ de multiples machines virtuelles)
────────────────────────────────────
... pour une informatique libre ! -membre de l'April

Avatar du membre
tioker
Messages : 234
Enregistré le : sam. 6 mai 2017 00:33
Localisation : Anjou...Feu !
Contact :

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

Messagepar tioker » lun. 17 juil. 2017 22:12

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/egraffin/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.
Linux Mint 18.3 Cinnamon 64 bits sur Dell Optiplex 790 - Intel I3-2120 3.2ghz
Sinon: Windows 7/10, NAS Synology, compte Google Drive, Chromebase, Chromebook, Chromecast, IOS

Avatar du membre
arghlub
modérateur
Messages : 3126
Enregistré le : dim. 21 mai 2017 08:19
Localisation : Provence

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

Messagepar arghlub » lun. 17 juil. 2017 22:31

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...
;)
Portable • Lenovo G50-80 LinuxMint 18.3 XFCE 4.12.3
Tour (custom)CM MSI Z270 Gaming M3 | CPU Intel I7-7700K | CG MSI Nvidia GTX 1080 | RAM 16Go DDR4 3000MHz | Debian 9 XFCE 4.12.3 (+ de multiples machines virtuelles)
────────────────────────────────────
... pour une informatique libre ! -membre de l'April

Avatar du membre
tioker
Messages : 234
Enregistré le : sam. 6 mai 2017 00:33
Localisation : Anjou...Feu !
Contact :

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

Messagepar tioker » lun. 17 juil. 2017 23:49

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
Modifié en dernier par tioker le mar. 18 juil. 2017 09:02, modifié 2 fois.
Linux Mint 18.3 Cinnamon 64 bits sur Dell Optiplex 790 - Intel I3-2120 3.2ghz
Sinon: Windows 7/10, NAS Synology, compte Google Drive, Chromebase, Chromebook, Chromecast, IOS

Avatar du membre
arghlub
modérateur
Messages : 3126
Enregistré le : dim. 21 mai 2017 08:19
Localisation : Provence

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

Messagepar arghlub » mar. 18 juil. 2017 02:00

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
;)

;)
Portable • Lenovo G50-80 LinuxMint 18.3 XFCE 4.12.3
Tour (custom)CM MSI Z270 Gaming M3 | CPU Intel I7-7700K | CG MSI Nvidia GTX 1080 | RAM 16Go DDR4 3000MHz | Debian 9 XFCE 4.12.3 (+ de multiples machines virtuelles)
────────────────────────────────────
... pour une informatique libre ! -membre de l'April

Avatar du membre
arghlub
modérateur
Messages : 3126
Enregistré le : dim. 21 mai 2017 08:19
Localisation : Provence

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

Messagepar arghlub » mar. 18 juil. 2017 02:23

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é.
;)
Portable • Lenovo G50-80 LinuxMint 18.3 XFCE 4.12.3
Tour (custom)CM MSI Z270 Gaming M3 | CPU Intel I7-7700K | CG MSI Nvidia GTX 1080 | RAM 16Go DDR4 3000MHz | Debian 9 XFCE 4.12.3 (+ de multiples machines virtuelles)
────────────────────────────────────
... pour une informatique libre ! -membre de l'April

Avatar du membre
tioker
Messages : 234
Enregistré le : sam. 6 mai 2017 00:33
Localisation : Anjou...Feu !
Contact :

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

Messagepar tioker » mar. 18 juil. 2017 09:02

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.
Linux Mint 18.3 Cinnamon 64 bits sur Dell Optiplex 790 - Intel I3-2120 3.2ghz
Sinon: Windows 7/10, NAS Synology, compte Google Drive, Chromebase, Chromebook, Chromecast, IOS


Retourner vers « Le terminal »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité