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.

#1 Le 30/03/2021, à 22:36

gascon

Commande pour afficher arboressence des fichiers et dossiers

Bonjour,
Un de mes disques  crie au décès (7 ans 24/24 + p2p). Il y a pas mal de données précieuse que je vais déplacer et en profiter pour réorganiser. Mais j'aimerais quand même garder un souvenir de ce premier disque dans un fichier texte. Je métrais au début juste arborescence des dossiers puis ensuite celle des fichiers, qui on pour certain des nom plus long que la largeur du terminal.
J'aimerais bien une arborescence des dossiers avec la date, le mieux que j'ai trouvé :

utilisateur@machine$ tree -d --du -h -D   > date_meta-ST3500418AS-500Go
.
├── [4.0K May 17  2013]  exemple1
└── [4.0K Nov  7  2018]  exemple2

Les tailles ne marche pas j’obtiens des chiffres différent sur d'autre répertoire mais qui ne sont pas bon mais les tailles pour les dossiers pas trop important. Les dates je sais pas si y a moyen aussi de les afficher "2018 11 7" ou au pire "7 11 2018".

Par contre les fichier j'aimerais vraiment la taille, la date de création et la date de dernière modification. Sa semble impossible avec tree d'affiché les deux et un plus l'obtion -c modifie l'ordre d'affichage :

utilisateur@machine$ tree --du -f -h -D --dirsfirst  > date_meta-ST3500418AS-500Go
.
├── [ 76M May 17  2013]  ./exemple1
│   ├── [ 16M May 17  2013]  ./exemple1/test1.cbr
│   ├── [ 13M May 17  2013]  ./exemple1/test2.cbr
│   ├── [ 15M May 17  2013]  ./exemple1/test3.cbr
│   └── [ 31M May 17  2013]  ./exemple1/test4.cbz
├── [226M Nov  7  2018]  ./exemple2
│   ├── [ 18M Jan 27  2015]  ./exemple2/test.-Episode1.mp3
│   ├── [ 24M Jan 27  2015]  ./exemple2/test.-Episode2.mp3
...
utilisateur@machine$ tree --du -f -h -D -c --dirsfirst  > date_meta-ST3500418AS-500Go
.
├── [226M Nov  7  2018]  ./exemple2
│   ├── [ 22M Nov  7  2018]  ./exemple2/test.mp3
│   ├── [ 18M Nov  7  2018]  ./exemple2/test.-Episode1.mp3
│   ├── [ 24M Nov  7  2018]  ./exemple2/test.-Episode2.mp3
│   ├── [ 28M Nov  7  2018]  ./exemple2/test.-Episode3.mp3
├── [ 76M Feb  5  2019]  ./exemple1
│   ├── [ 16M Feb  5  2019]  ./exemple1/test1.cbr
│   ├── [ 13M Feb  5  2019]  ./exemple1/test2.cbr
│   ├── [ 15M Feb  5  2019]  ./exemple1/test3.cbr
│   └── [ 31M Feb  5  2019]  ./exemple1/test4.cbz
...

Les tailles marchent.

Avec ls le mieux que j'ai réussis a faire c'est :

utilisateur@machine$ ls -lhG --time-style=iso   > date_meta-ST3500418AS-500Go
drwxr-xr-x 4 gascon  24K 03-28 01:41  Téléchargements
-rw-rw-r-- 1 gascon 1,5K 2018-04-02   testdisk.log

Je rentre pas dans les dossiers et  il affiche l'heure rendant la date incompréhensible, j'ai pas réussis a enlever droit et utilisateur :

Dans le top du top j'aimerai obtenir pour les dossiers :

├── [Date création]  dosssier1			taille avec unité  
│   ├── [ Date création]  dosssier2		taille avec unité
│   │   ├── [Date création]  dosssier3		taille avec unité

Pour les fichiers :

[Date création - date modification - taille avec unité ]	├──   /dosssier 1
[Date création - date modification - taille avec unité ]	│  ├──  /dossier 1/dosssier 2
[Date création - date modification - taille avec unité ]	│   │ /dossier 1/dosssier 2/fichier 1
[Date création - date modification - taille avec unité ]	│  ├──  /dossier 1/dosssier 3

ou

[Date création - date modification ]	├──   /dosssier 1
[Date création - date modification ]	│  ├──  /dossier 1/dosssier 2
[Date création - date modification ]	│   │ [taille avec unité] /dossier 1/dosssier 2/fichier 1
[Date création - date modification ]	│  ├──  /dossier 1/dosssier 3

Dernière modification par gascon (Le 30/03/2021, à 23:03)


se qui ne me tue pas me rend plus fort Tout seul on va plus vite, ensemble, on va plus loin. ^^

Hors ligne

#2 Le 30/03/2021, à 22:54

Hizoka

Re : Commande pour afficher arboressence des fichiers et dossiers

Salut, si tu veux quelque chose de vraiment spécifique, tu te crées une boucle qui travaille la liste des fichiers trier...

while read fichier
do
# stat $fichier pour récupérer les infos... et les afficher
# on peut compter le nombre de / pour connaître la profondeur pour savoir les espaces à mettre en début de ligne...
done < <(find . -type f | sort)

ou un mapfile pour récupérer les fichiers dans un tableau suivi d'une boucle for.


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#3 Le 30/03/2021, à 23:16

gascon

Re : Commande pour afficher arboressence des fichiers et dossiers

Merci, effectivement sa pourrait être une bonne occasion de découvrir comment faire des script pour moi.
J'ai mis les exemple idéal pour montrer ce que je recherche mais une commande qui donne "date"+"date modif"+"taille"+"chemin et nom" dans n'importe quel ordre un peu présentable  et en rentrant dans les dossiers me conviendra.
En fait tree est presque parfait il me manquerais les deux date a la fois (écrit en chiffre).


se qui ne me tue pas me rend plus fort Tout seul on va plus vite, ensemble, on va plus loin. ^^

Hors ligne

#4 Le 31/03/2021, à 09:24

Hizoka

Re : Commande pour afficher arboressence des fichiers et dossiers

Tree propose :

       --timefmt format
              Prints (implies -D) and formats the date according to the format string which uses the strftime(3) syntax.

mais ça ne t'affichera que la date de modification

tree --du -f -h -D --dirsfirst --timefmt '%d/%m/%Y'

KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#5 Le 31/03/2021, à 09:31

iznobe

Re : Commande pour afficher arboressence des fichiers et dossiers

Bonjour ,

il ,n ' y a pas d ' option recursive dans tree , ca me parait etonnant .
un man tree peut surement en dire plus .


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#6 Le 31/03/2021, à 09:51

Hizoka

Re : Commande pour afficher arboressence des fichiers et dossiers

Quoi ?
Évidemment que c'est récursif, sinon il n'a aucun intérêt wink


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#7 Le 31/03/2021, à 12:37

gascon

Re : Commande pour afficher arboressence des fichiers et dossiers

tree --du -fhD --dirsfirst --timefmt '%Y-%m-%'d

Me plaît beaucoup, peu être que j'utiliserai ça, c'est pas mal quand même. J'avais vu timefmt sans le comprendre. Merci. Et je comprend aussi que j'avais mal lue -D qui n'est pas la date de création mais de modification avec  -c changement de statut que je ne comprend pas.

Au final la proposition de #2 est simple a utiliser, il suffit de mettre dedans des commande comme on le ferai dans le terminal en remplaçant l'argument par "$fichier". J'en profite pour demander quelque explication :
-  while read fichier -> [CONDITION] ça j'ai bien compris, on fait une boucle tant qu'il y a des fichier a lire
- do                         -> [COMMANDS] syntaxe du while
- done                     -> syntaxe du while
- < <                        -> sa j'ai pas trouver, mais j'ai l'impression que sa sert a fabriquer "fichier" / $fichier
(find . -type f | sort) -> sa j'ai du mal a comprendre. | veut dire que c'est une ou l'autre qui s’exécute ?
                               "trouver regular file" ou " Écrire concatnation triée de tous les fichier "

J'ai fait des test avec stat :

:~$ stat --printf="type %F nom %n taille %s \n date : \n naissance ?: %w \n dernier accès : %x \n modification : %y \n statu change ?: %z \n" /home/utilisateur/Téléchargements/arboresence
type fichier nom /home/utilisateur/Téléchargements/arboresence taille 350 
 date : 
naissance ?: - 
 dernier accès : 2021-03-31 09:19:07.713347365 +0200 
 modification : 2021-03-31 09:19:07.717347289 +0200 
 statu change ?: 2021-03-31 09:19:07.729347065 +0200 
:~$ stat --printf="type %F nom %n taille %s \n date : \n naissance ?: %w \n dernier accès : %x \n modification : %y \n statu change ?: %z \n" /home/utilisateur/Téléchargements
type répertoire nom /home/utilisateur/Téléchargements taille 24576 
 date : 
 naissance ?: - 
 dernier accès : 2021-03-31 10:44:13.991614931 +0200 
 modification : 2021-03-31 09:19:07.729347065 +0200 
 statu change ?: 2021-03-31 09:19:07.729347065 +0200 

Sans la comprendre j'ai testé -t "terse form"  pas vu de différence. Bon un truc m'embête je crois pas avoir la date de création, que je suppose être "naissance". Et j'ai pas trouver d'argument pour mettre la taille et les date lisible. L'heure sa me plaît en fait mais  les décimale des seconde sa fait un peu trop long. Je suppose qu'on peu le faire en script. Et les taille de répertoire ne son pas bonne aussi.

Est ce que c'est bien de garder un seul while ou sa serait mieux de faire un while qui reste dans le répertoire et qui lance une nouvelle boucle chaque fois qu'il trouve un répertoire. Est ce qu'on peu faire un sorte qu'il fasse d'abord les répertoire puis les fichiers, car là j'ai l'impression qu'il traite dans l'ordre alphabétique que se soit répertoire ou fichier. Je pense qu'il faut faire quelque chose pour les nom de fichier avec un espace, j'ai fait un test avec :

while read fichier
do
# stat $fichier pour récupérer les infos... et les afficher
# on peut compter le nombre de / pour connaître la profondeur pour savoir les espaces à mettre en début de ligne...
# echo $fichier
stat -c%n $fichier
done < <(find . -type f | sort)

il m'affiche :

stat: impossible d'évaluer 'nom': Aucun fichier ou dossier de ce type
stat: impossible d'évaluer 'coupé': Aucun fichier ou dossier de ce type
stat: impossible d'évaluer 'en': Aucun fichier ou dossier de ce type
stat: impossible d'évaluer 'morceau': Aucun fichier ou dossier de ce type

Suivant vos indication je pense que je peu faire un script en "faux" code et vous demander de le rectifier ensuite.

Dernière modification par gascon (Le 31/03/2021, à 12:40)


se qui ne me tue pas me rend plus fort Tout seul on va plus vite, ensemble, on va plus loin. ^^

Hors ligne

#8 Le 31/03/2021, à 13:02

MicP

Re : Commande pour afficher arboressence des fichiers et dossiers

…(find . -type f | sort) -> sa j'ai du mal a comprendre. | veut dire que c'est une ou l'autre qui s’exécute ?…

Non, ce n'est pas un or qui s'écrit ||

Le caractère | est un pipe

Il sert à connecter le flux de sortie (stdout) de la commande qui est à sa gauche à l'entrée (stdin) de la commande qui est sa droite

Donc, dans cette ligne de commandes, le flux de sortie de la commande find sera connectée à l'entrée de la commande sort

=======

… < <                        -> sa j'ai pas trouver, mais j'ai l'impression que sa sert a fabriquer "fichier" / $fichier …

La boucle while se termine par done
et les deux caractères < < qui suivent ce done permettent de rediriger la sortie de la commande qui suit (find . -type f | sort)
à l'entrée de la commande while

Dernière modification par MicP (Le 31/03/2021, à 13:06)

Hors ligne

#9 Le 31/03/2021, à 13:06

Watael

Re : Commande pour afficher arboressence des fichiers et dossiers

ce n'est pas << puis (commande)
c'est < puis <(substitution de processus)
et puis UMQ*

enfin la redirection de find même vers une boucle while peut poser problèmes si des noms de fichiers comportent un alinéa :

while IFS=' ' read -d '' access modif fic
do
    printf '%(%F %T)T %(%F %T)T %s\n' $((10#${access##*.})) $((10#${modif##*.})) "$fic" #UMQ!
done < <(find -type f -printf '%A@ %T@ %p\0' | sort -z -k1,2n)

stat n'est pas requis avec find.
--
* Use More Quotes


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#10 Le 31/03/2021, à 13:12

Hizoka

Re : Commande pour afficher arboressence des fichiers et dossiers

Ce sont les bases des scripts bash :
https://abs.traduc.org/abs-fr/
https://tldp.org/LDP/abs/html/abs-guide.html

(find . -type f | sort) -> sa j'ai du mal a comprendre. | veut dire que c'est une ou l'autre qui s’exécute ?

Pas de tout, sort travaille sur ce que lui donne find.

Et j'ai pas trouver d'argument pour mettre la taille et les date lisible.

Ca veut dire qu'il faut les retravailler.

Et les taille de répertoire ne son pas bonne aussi.

C'est la taille du dossier, pas de son contenu.
tu peux utiliser du -h $dossier | tail -n 1 par exemple.

Est ce que c'est bien de garder un seul while ou sa serait mieux de faire un while qui reste dans le répertoire et qui lance une nouvelle boucle chaque fois qu'il trouve un répertoire.

Les 2 sont possibles mais je pense que c'est plus lourd d'utiliser plusieurs boucles.

Est ce qu'on peu faire un sorte qu'il fasse d'abord les répertoire puis les fichiers, car là j'ai l'impression qu'il traite dans l'ordre alphabétique que se soit répertoire ou fichier

Il est possible de travailler les dossiers dans une 1ere boucle et à chaque fois tu recherches les fichiers du dossier.
Normalement, les adresses sont triées, donc je comprends pas ton problème...
Ex :

a/b/c/fichier1
a/b/c/fichier2
a/b/d/fichier1
a/c/c/fichier1

Je pense qu'il faut faire quelque chose pour les nom de fichier avec un espace

Ultrabasique mon cher monsieur, on encadre les variables de ".

EDIT : Bien vu Watael smile
il faut que je détaille ton printf mais les résultats ne semblent pas très fiables.
2037-02-28 11:34:00 1970-01-01 01:00:00 ...

Dernière modification par Hizoka (Le 31/03/2021, à 13:18)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#11 Le 31/03/2021, à 13:25

gascon

Re : Commande pour afficher arboressence des fichiers et dossiers

Ok merci, je regarde tout ça.

La proposition de Watael semble vraiment cool. Je vais mettre du temps a la comprendre sans doute.

2004-05-21 08:38:50 2138-12-09 23:55:30 ./arboresence

Les date on effectivement un soucis, ainsi que l'ordre, j'ai testé en rajoutant -g -d mais sa ne change pas, sans doute que ceci, que j'ai du mal a comprendre est prioritaire.

 -k, --key=KEYDEF
              sort via a key; KEYDEF gives location and type
Hizoka a écrit :

Il est possible de travailler les dossiers dans une 1ere boucle et à chaque fois tu recherches les fichiers du dossier.
Normalement, les adresses sont triées, donc je comprends pas ton problème...

Oui ce truc la est plus compliqué que ce que je pensais. Car j'aimerai avoir les dossier un premier et garder l'ordre alphabétique :

tris a écrit :

/a-dossier
            0-fichier
            a-fichier
            z-fichier
/b-dossier
            0-fichier        (pas bon)
            /a-dossier
                         0-fichier    (/b-dossier/a-dossier/0-fichier)
                         z-fichier
            b-fichier        (pas bon)
           /z-dossier
                          0-fichier
                          z-fichier
           0-fichier                  (/b-dossier/0-fichier)
           z-fichier
/z-dossier
0-fichier
z-fichier

Dernière modification par gascon (Le 31/03/2021, à 14:09)


se qui ne me tue pas me rend plus fort Tout seul on va plus vite, ensemble, on va plus loin. ^^

Hors ligne

#12 Le 04/04/2021, à 06:06

MicP

Re : Commande pour afficher arboressence des fichiers et dossiers

Bonjour

Dans son message #10, Hizoka a écrit :

…les résultats ne semblent pas très fiables.
2037-02-28 11:34:00 1970-01-01 01:00:00 ...

Essaye avec ça :

while IFS=' ' read -d '' access modif fic
do
    printf '%(%F %T)T %(%F %T)T %s\n' ${access%\.*} ${modif%\.*} "$fic" #UMQ!
done < <(find -type f -printf '%A@ %T@ %p\0' | sort -z -k1,2n)

Dernière modification par MicP (Le 04/04/2021, à 09:38)

Hors ligne

#13 Le 05/04/2021, à 00:04

gascon

Re : Commande pour afficher arboressence des fichiers et dossiers

	# read :
	# IFS variable de séparation des variables
	# -d pas trouvé
	#
	# date longue : %F|%T
	# date courte : %Y%m%d-%H%M%S
echo -e "********************************************************************************\n"$(date +"%Y%m%d-%H%M%S")"\n********************************************************************************\n"
while IFS=' ' read -d '' access modif fic
do
    printf '[%(%Y%m%d-%H%M%S)T %(%Y%m%d-%H%M%S)T taille]	%s\n' ${access%\.*} ${modif%\.*} "$fic" #UMQ!
done < <(find -type f -printf '%A@ %T@ %p\0' | sort -z -k1,2n)

Bon j'ai pas fini la partie ou je peu avancer tout seul, il me reste encore 3 trucs :
- gérer les tailles
- gérer l'ordre de trie correctement (sa je pense que je serai pas faire ou avec 2 while)
- Compte les / pour afficher l'arborescence.

Mais au cour de mes recherche sur les différente commande j'en viens a me poser une question : est ce que l'ext4 mémorise la date de création des fichiers ?
access%\.* -> donne

[2021-04-04|20:46:43 2021-04-04|20:46:39 taille] ./arboresence

Qui est mon fichier shell créé le 31/03/2021. Cette info me semble tellement importante que j'ai pas pensé une seconde qu'elle pouvais ne pas exister mais je trouve aucun pas de moyen de l'afficher. Et avec le recul je comprend un mieux le man de stat :

%w     time of file birth, human-readable; - if unknown

Et dans mon test sa avait affiché "-". Du coup si cette information n'est pas obtenable, continué m’apprendrais plus, mais je vais finir sur un résultat quasi identique a :

tree --du -fDh --dirsfirst --timefmt '%Y%m%d-%H%M%S'

Et autant m’arrêter là.

Dans tous les cas, l'écriture bash semble pas simple, juste pour la comprendre un peu. Je comprend pas tout a fait ${access%\.*} mais pourquoi Watael (que je croit avoir vue a la pointe de bash sur la forum) avait fait $((10#${access##*.})). C'est quoi "10#" "##" ? Pourquoi dans un cas on a ".*" et l'autre "*." ?


edit : je suis perplexe sa semble être bon pour les dossiers du coup j'ai envie de continuer c'est en fait le plus important pour moi :

utilisateur@machine:~/Téléchargements$ stat --printf="type %F nom %n taille %s \n date : \n naissance ?: %w \n dernier accès : %x \n modification : %y \n statu change ?: %z \n" /home/utilisateur/Téléchargements/X.L.E.Saison_1-test!
type répertoire nom /home/gascon/Téléchargements/X.L.E.Saison_1-test! taille 4096 
 date : 
 naissance ?: - 
 dernier accès : 2021-04-04 17:25:43.897487772 +0200       # hummm ??? j'ai lancé des scan du dossier en boucle pour les test mais les dernier remonte a juste avant le renommage, je vois pas pour 17h.
 modification : 2018-11-07 06:04:23.762788246 +0100         # création semble cohérent
 statu change ?: 2021-04-05 00:11:00.645680793 +0200      # j'ai changer le nom

utilisateur@machine:~/Téléchargements$ stat --printf="type %F nom %n taille %s \n date : \n naissance ?: %w \n dernier accès : %x \n modification : %y \n statu change ?: %z \n" /home/utilisateur/Téléchargements/arboresence
type fichier nom /home/gascon/Téléchargements/arboresence taille 2149 
 date : 
 naissance ?: - 
 dernier accès : 2021-04-04 23:27:46.122065449 +0200 
 modification : 2021-04-04 23:27:46.134065227 +0200 
 statu change ?: 2021-04-04 23:27:46.158064785 +0200 

Je n'ai pas pu tester avec prinf car je viens de voir que le while "n'affiche" pas les dossiers et je n'ai pas asses bien compris le script pour l'utiliser dans un terminal avec dossier en argument. Je remarque que "access" et "modif" sont des date différente qui fonctionne en quelque sorte pour les fichier qui ne vienne pas de mon système (téléchargé).

Dernière modification par gascon (Le 05/04/2021, à 01:51)


se qui ne me tue pas me rend plus fort Tout seul on va plus vite, ensemble, on va plus loin. ^^

Hors ligne

#14 Le 05/04/2021, à 00:46

MicP

Re : Commande pour afficher arboressence des fichiers et dossiers

… ${access%\.*}  … C'est quoi "10#" "##"  …

michel@xubu:~$ access="01234.5678"
michel@xubu:~$ echo $access                 # J'affiche la chaîne de caractère contenue dans la variable access
01234.5678
michel@xubu:~$ echo ${access%\.*}           # J'affiche la sous-chaîne qui est avant le point
01234
michel@xubu:~$ echo $(( 10#${access%\.*} )) # J'affiche la valeur décimale de la sous-chaîne qui est avant le point
1234
michel@xubu:~$ echo $(( ${access%\.*} ))    # Comme la sous-chaîne débute par un 0 ce serait la valeur octale correspondante qui serait affichée
668
michel@xubu:~$ 
michel@xubu:~$ maVar="0123.456.789"
michel@xubu:~$ echo ${maVar#*\.}            # J'affiche la sous-chaîne qui est après le premier point
456.789
michel@xubu:~$ echo ${maVar##*\.}           # J'affiche la sous-chaîne qui est après le dernier point
789
michel@xubu:~$ echo ${maVar%\.*}            # J'affiche la sous-chaîne qui est avant le dernier point
0123.456
michel@xubu:~$ echo ${maVar%%\.*}           # J'affiche la sous-chaîne qui est avant le premier point
0123
michel@xubu:~$

=======

est ce que l'ext4 mémorise la date de création des fichiers ?

voir : unix.stackexchange.com -> How to find creation date of file?

=======

… je viens de voir que le while "n'affiche" pas les dossiers …

Ce n'est pas le while,
c'est le prédicat spécifié par  -type f de la commande find qui impose de ne rechercher que les fichiers de type regular file

man find a écrit :
…
       -type c
              File is of type c:
              b      block (buffered) special
              c      character (unbuffered) special
              d      directory
              p      named pipe (FIFO)
              f      regular file
              l      symbolic link; this is never true if the -L option or the -follow option is in effect, unless the symbolic link is broken.  If you want to search for symbolic links when -L is in effect, use -xtype.
              s      socket
              D      door (Solaris)
              To search for more than one type at once, you can supply the combined list of type letters separated by a comma `,' (GNU extension).
…

Dernière modification par MicP (Le 05/04/2021, à 07:23)

Hors ligne

#15 Le 05/04/2021, à 01:09

gascon

Re : Commande pour afficher arboressence des fichiers et dossiers

@MicP merci, je comprend
C'est vraiment l'histoire du "plus t'en sais, plus tu sais que tu ne sais rien". Au début j’étais sur qu'une commande connu avec les bon arguments doit faire ce que je recherche et maintenant je me dit il va falloir que je comprenne une 40aine de notion de bash pour un script de 15 lignes, voir plus ^^

au passage on m'a indiqué ceci :

man 7 inode a écrit :

File creation (birth) timestamp (btime)
              (not returned in the stat structure); statx.stx_btime
              The file's creation timestamp.  This is set on file creation and not changed subsequently.
              The btime timestamp was not historically present on UNIX systems and is not currently supported by most Linux filesystems.

Est ce que sa veut dire que stat aurait du le retourner, ou au contraire qu'il ne le retourne pas ? et dans ce cas avec quel commande je peu vérifier que mon système de fichier l’intègre ou pas ?


se qui ne me tue pas me rend plus fort Tout seul on va plus vite, ensemble, on va plus loin. ^^

Hors ligne

#16 Le 05/04/2021, à 01:30

MicP

Re : Commande pour afficher arboressence des fichiers et dossiers

… Est ce que sa veut dire que stat aurait du le retourner, ou au contraire qu'il ne le retourne pas ?  …

La comande stat de debian et ubuntu ne retourne pas la date de création d'un fichier sur un système de fichiers ext4 (je n'ai pas vérifié pour les autres systèmes de fichiers)

… et dans ce cas avec quel commande je peu vérifier que mon système de fichier l’intègre ou pas ? …

Je ne sais pas.

=======
Pour récupérer la date de création d'un fichier sur un système de fichiers de type ext4
on peut utiliser la commande stat pour trouver le numéro d'inode du fichier concerné
et ensuite la commande debugfs pour récupérer la date de création de cet inode.

Voir : unix.stackexchange -> Birth is empty on ext4

=======

… Watael (que je croit avoir vue a la pointe de bash sur la forum)  …

De mon point de vue, je suis très très loin d'avoir ne serait-ce que le dixième de ses compétences.

Dernière modification par MicP (Le 05/04/2021, à 07:27)

Hors ligne

#17 Le 05/04/2021, à 02:00

gascon

Re : Commande pour afficher arboressence des fichiers et dossiers

Merci encore smile
crtime: file creation time.
Ce dernier lien règle la question. debugfs demande sudo et affiche pour le fichier arborescence :

Inode: 897895   Type: regular    Mode:  0755   Flags: 0x80000
Generation: 370509725    Version: 0x00000000:00000001
User:  1000   Group:  1000   Project:     0   Size: 2464
File ACL: 0
Links: 1   Blockcount: 8
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x606a48bd:09887c44 -- Mon Apr  5 01:16:13 2021
 atime: 0x606a48bd:00f342c4 -- Mon Apr  5 01:16:13 2021
 mtime: 0x606a48bd:03cfab44 -- Mon Apr  5 01:16:13 2021
crtime: 0x606a48bd:00f342c4 -- Mon Apr  5 01:16:13 2021
Size of extra inode fields: 32
EXTENTS:
(0):10800233
(END)

Pour le même dossier tester #13 :

Inode: 827404   Type: directory    Mode:  0755   Flags: 0x80000
Generation: 561187623    Version: 0x00000000:0000000a
User:  1000   Group:  1000   Project:     0   Size: 4096
File ACL: 0
Links: 2   Blockcount: 8
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x606a3974:99f13a64 -- Mon Apr  5 00:11:00 2021
 atime: 0x606a3b4c:499a5860 -- Mon Apr  5 00:18:52 2021
 mtime: 0x5be27257:b5dce658 -- Wed Nov  7 06:04:23 2018
[crtime: 0x5be27254:91a5160c -- Wed Nov  7 06:04:20 2018
Size of extra inode fields: 32
EXTENTS:
(0):3156762
(END)

se qui ne me tue pas me rend plus fort Tout seul on va plus vite, ensemble, on va plus loin. ^^

Hors ligne

#18 Le 06/04/2021, à 17:09

gascon

Re : Commande pour afficher arboressence des fichiers et dossiers

Arggg tellement de truc a retenir je me perd. Le man de find c'est quelque chose!.
Du coup depuis hier. Je me suis fait un répertoire de test avec les dates de création dans les nom de fichier. Les premier sont fait a la main. donc il peu y avoir un décalage de quelque seconde mais ensuite j'ai utilisé :

# créer un dossier avec la date :
mkdir x_$(date +"%F_%T")
# fichier
echo x_"fichier de test" > a_$(date +"%F_%T")

Bon petite erreur au début j'avais pas mis le x_ nécessaire pour faire les test de trie ensuite et j'ai pas mis de .txt pour les fichiers ce qui fait perdre en lisibilité. Mais je veux pas renommer pour l'instant car mon but et de faire des test sur les date.

Voila quoi sa ressemble :

.
├── [4.0K 20210405-134708]  ./0_2021-04-05_13:47:08_e
├── [4.0K 20210405-132847]  ./2021-04-05_13-28-37_c_13-45-47
├── [3.0M 20210405-133602]  ./2021-04-05_13-29-24_b-copié-autre-disque
│   ├── [1.0M 20210405-133137]  ./2021-04-05_13-29-24_b-copié-autre-disque/2021-04-05_13-32-53_serveur_2013-10-02_18-26 (copie).rnd
│   ├── [1.0M 20210405-133137]  ./2021-04-05_13-29-24_b-copié-autre-disque/2021-04-05_13-32-53_serveur_2013-10-02_18-26.rnd
│   └── [1.0M 20210405-133137]  ./2021-04-05_13-29-24_b-copié-autre-disque/2021-04-05_13-35-58_serveur_2013-10-02_18-26 (copie renomer).rnd
├── [4.0K 20210405-134421]  ./2021-04-05_13:44:21_a
├── [705K 20210405-141745]  ./a_2021-04-05_13:46:42_d
│   ├── [4.0K 20210405-140353]  ./a_2021-04-05_13:46:42_d/0_2021-04-05_14:03:53
│   ├── [4.0K 20210405-140401]  ./a_2021-04-05_13:46:42_d/9_2021-04-05_14:04:01
│   ├── [ 40K 20210405-140702]  ./a_2021-04-05_13:46:42_d/a_2021-04-05_14:04:15
│   │   ├── [ 28K 20210405-140836]  ./a_2021-04-05_13:46:42_d/a_2021-04-05_14:04:15/a_2021-04-05_14:06:12
│   │   │   ├── [ 16K 20210405-141027]  ./a_2021-04-05_13:46:42_d/a_2021-04-05_14:04:15/a_2021-04-05_14:06:12/a_2021-04-05_14:08:36
│   │   │   │   ├── [4.0K 20210405-140933]  ./a_2021-04-05_13:46:42_d/a_2021-04-05_14:04:15/a_2021-04-05_14:06:12/a_2021-04-05_14:08:36/a_2021-04-05_14:09:33
│   │   │   │   ├── [4.0K 20210405-140926]  ./a_2021-04-05_13:46:42_d/a_2021-04-05_14:04:15/a_2021-04-05_14:06:12/a_2021-04-05_14:08:36/b_2021-04-05_14:09:26
│   │   │   │   ├── [4.0K 20210405-140919]  ./a_2021-04-05_13:46:42_d/a_2021-04-05_14:04:15/a_2021-04-05_14:06:12/a_2021-04-05_14:08:36/z_2021-04-05_14:09:19
│   │   │   │   ├── [  16 20210405-141027]  ./a_2021-04-05_13:46:42_d/a_2021-04-05_14:04:15/a_2021-04-05_14:06:12/a_2021-04-05_14:08:36/a_2021-04-05_14:10:27
│   │   │   │   ├── [  16 20210405-141015]  ./a_2021-04-05_13:46:42_d/a_2021-04-05_14:04:15/a_2021-04-05_14:06:12/a_2021-04-05_14:08:36/c_2021-04-05_14:10:15
│   │   │   │   └── [  16 20210405-140959]  ./a_2021-04-05_13:46:42_d/a_2021-04-05_14:04:15/a_2021-04-05_14:06:12/a_2021-04-05_14:08:36/z_2021-04-05_14:09:59
│   │   │   ├── [4.0K 20210405-140827]  ./a_2021-04-05_13:46:42_d/a_2021-04-05_14:04:15/a_2021-04-05_14:06:12/c_2021-04-05_14:08:27
│   │   │   ├── [4.0K 20210405-140819]  ./a_2021-04-05_13:46:42_d/a_2021-04-05_14:04:15/a_2021-04-05_14:06:12/z_2021-04-05_14:08:19
│   │   │   ├── [  16 20210405-140757]  ./a_2021-04-05_13:46:42_d/a_2021-04-05_14:04:15/a_2021-04-05_14:06:12/a_2021-04-05_14:07:57
│   │   │   ├── [  16 20210405-140749]  ./a_2021-04-05_13:46:42_d/a_2021-04-05_14:04:15/a_2021-04-05_14:06:12/b_2021-04-05_14:07:49
│   │   │   └── [  16 20210405-140743]  ./a_2021-04-05_13:46:42_d/a_2021-04-05_14:04:15/a_2021-04-05_14:06:12/z_2021-04-05_14:07:43
│   │   ├── [4.0K 20210405-140619]  ./a_2021-04-05_13:46:42_d/a_2021-04-05_14:04:15/b_2021-04-05_14:06:19
│   │   ├── [4.0K 20210405-140628]  ./a_2021-04-05_13:46:42_d/a_2021-04-05_14:04:15/z_2021-04-05_14:06:28
│   │   ├── [  16 20210405-140647]  ./a_2021-04-05_13:46:42_d/a_2021-04-05_14:04:15/a_2021-04-05_14:06:47
│   │   ├── [  16 20210405-140656]  ./a_2021-04-05_13:46:42_d/a_2021-04-05_14:04:15/c_2021-04-05_14:06:56
│   │   └── [  16 20210405-140702]  ./a_2021-04-05_13:46:42_d/a_2021-04-05_14:04:15/z_2021-04-05_14:07:02
│   ├── [4.0K 20210405-140426]  ./a_2021-04-05_13:46:42_d/c_2021-04-05_14:04:26
│   ├── [4.0K 20210405-140436]  ./a_2021-04-05_13:46:42_d/z_2021-04-05_14:04:36
│   ├── [  16 20210405-140325]  ./a_2021-04-05_13:46:42_d/0_2021-04-05_14:03:25
│   ├── [  16 20210405-140332]  ./a_2021-04-05_13:46:42_d/9_2021-04-05_14:03:32
│   ├── [  16 20210405-140029]  ./a_2021-04-05_13:46:42_d/a_2021-04-05_14:00:29.txt
│   ├── [  16 20210405-140118]  ./a_2021-04-05_13:46:42_d/b_2021-04-05_14:01:18
│   ├── [   0 20210405-141415]  ./a_2021-04-05_13:46:42_d/d1_2021-04-05_14:14:15
│   ├── [   0 20210405-141415]  ./a_2021-04-05_13:46:42_d/d2_renomé_2021-04-05_14:14:15_141504
│   ├── [645K 20210405-141745]  ./a_2021-04-05_13:46:42_d/d3_modifié_2021-04-05_14:14:15
│   └── [  16 20210405-140300]  ./a_2021-04-05_13:46:42_d/z_2021-04-05_14:03:00
└── [1.0M 20210405-133137]  ./2021-04-05_13-32-53_serveur_2013-10-02_18-26.rnd

Donc j'ai voulue modif un peu le while pour comparer toute les dates accessible avec les dates des dossiers et comprendre qu'elle sont les deux que je veux utilisé. J'ai vu une différence avec find et stat et une incompréhension du retour de stat qui se met entre les deux %s de printf. Mais quand je rajoute la variable %t -> t_change2  commenté ici, stat ne marche plus .... :

# read
# -d pas trouvé sa fonction
#
#
#!/bin/bash
date_form=%F_%T			# format de date longue
# date_form=%Y%m%d-%H%M%S	# format de cate courte
echo -e "********************************************************************************\n"$(date +"$date_form")"\n********************************************************************************\n"
while IFS=' ' read -d '' t_access t_modification t_change cible c_type	# t_change2
do
#	printf '[%('$date_form')T %('$date_form')T %('$date_form')T]	%s\n' ${t_access%\.*} ${t_modification%\.*} ${t_change%\.*} "$cible" #UMQ!
	printf '%s	%s\n	atime %('$date_form')T\n	ctime %('$date_form')T\n	mtime %('$date_form')T\n'"$cible" "$c_type" ${t_access%\.*} ${t_change%\.*} ${t_modification%\.*}  #UMQ!
#	echo -e $t_change2 "\n"
	stat --printf="stat :	%F\natime %x \nctime %z\nmtime %y\n" $cible	#  nom %n taille %s crtime %w 
done < <(find -printf '%A@ %T@ %C@ %p\0 %y' | sort -z -k1,2n)	#  %t	
# %Ak	access time		atime: file access time
# %Ck	status change time	ctime: file change time.
# %Tk	modification time	mtime: file modification time.
#
# %d     File's depth in the directory tree; 0 means the file is a starting-point.
# %i     File's inode number (in decimal).
# %k     The  amount  of disk space used for this file in 1K blocks.  Since disk space is allocated in multiples of the filesystem block size this is usually greater than %s/1024, but it can also be smaller if the file is a sparse file.
# %p     File's name.
# %P     File's name with the name of the starting-point under which it was found removed.
# %s     File's size in bytes.
# %t     File's last modification time in the format returned by the C `ctime' function.
# %y     File's type (like in ls -l), U=unknown type (shouldn't happen)

un exemple du retour :

********************************************************************************
2021-04-06_16:53:17
********************************************************************************

	d
	atime 2021-04-06_16:53:17
	ctime 2021-04-06_16:53:17
	mtime 2021-04-06_16:53:17
stat: opérande manquant
Saisissez « stat --help » pour plus d'informations.
	d1617622482
	atime 2021-04-05_13:34:16
	ctime 2021-04-05_13:31:37
	mtime 2021-04-06_16:53:17
./2021-04-05_13-29-24_b-copié-autre-disque/2021-04-05_13-32-53_serveur_2013-10-02_18-26.rndstat :	fichier
atime 2021-04-05 13:34:42.366626989 +0200 
ctime 2021-04-05 13:34:16.619148274 +0200
mtime 2021-04-05 13:31:37.562472000 +0200
	d1617624029
	atime 2021-04-05_14:00:29
	ctime 2021-04-05_14:00:29
	mtime 2021-04-06_16:53:17
./a_2021-04-05_13:46:42_d/a_2021-04-05_14:00:29.txtstat :	fichier
atime 2021-04-05 14:00:29.821221782 +0200 
ctime 2021-04-05 14:00:29.821221782 +0200
mtime 2021-04-05 14:00:29.821221782 +0200
	d1617624407
	atime 2021-04-05_14:06:47
	ctime 2021-04-05_14:06:47
	mtime 2021-04-06_16:53:17

Voilà si quelqu'un veux bien me remettre cette version au propre avec le %t qui fonctionne (si possible le stat qui se mélange pas) ensuite je regarderai les dates de prés et je comparerai avec debug peu être a la main si trop compliqué a intégré juste pour une étape de test intermédiaire.

Dernière modification par gascon (Le 06/04/2021, à 17:11)


se qui ne me tue pas me rend plus fort Tout seul on va plus vite, ensemble, on va plus loin. ^^

Hors ligne

#19 Le 06/04/2021, à 19:41

MicP

Re : Commande pour afficher arboressence des fichiers et dossiers

Bonjour

Pour l'option d de la fonction read
il faut aller voir la page man du bash ou des builtins du shell bash
car la fonction read utilisée dans ce script bash
est une des fonctions internes du bash <=> builtins

Tu pourras la rechercher dans la page man de bash ou des builtins
ou bien la trouver directement en lançant la ligne de commande suivante :

man --pager='less -p "read \["' bash

=======

[code]# read
# -d pas trouvé sa fonction
#
#
#!/bin/bash
[/code]

la dernière ligne de cet extrait de ton script
est ce qu'on appelle le shebang
et cette ligne doit toujours être la première ligne dans un script
Donc, il faut mettre les lignes commentées après le shebang

=======
Change la ligne suivante :

done < <(find -printf '%A@ %T@ %C@ %p\0 %y' | sort -z -k1,2n)	#  %t	

par :

done < <(find -printf '%A@ %T@ %C@ %p %y\0' | sort -z -k1,2n)	#  %t

Dernière modification par MicP (Le 07/04/2021, à 05:02)

Hors ligne

#20 Le 06/04/2021, à 22:34

gascon

Re : Commande pour afficher arboressence des fichiers et dossiers

Ok je comprend mieux car j'avais fait d'autre test ensuite et les choses s’empiraient (étonnant^^). Heureusement que j'ai de l'aide, vu que je comprend pas bien, je mémorise très peu. Mais en revenant sur les choses après avoir compris d'autre notion sa devient plus clair.

MicP a écrit :

...la dernière ligne de cet extrait de ton script
est ce qu'on appelle le shebang
et cette ligne doit toujours être la première ligne dans un script
Donc, il faut mettre les lignes commentées après le shebang

Oui mon éditeur de texte est content il prend de la couleur.

Edit : Le man me donne pour read :

              -d delim
                     The first character of delim is used to terminate the input line, rather than newline.
                     If delim is the empty string, read will terminate a line when it reads a NUL character.

Soit : "Le premier caractère de délim est utilisé pour mettre fin à la ligne d'entrée, plutôt qu'à la nouvelle ligne. Si la fin est la chaîne vide, lisez une ligne quand elle lit un caractère NUL" Je visualise pas pour l'instant ce que ça fait.

J'ai trouvé  \0 en copiant le man dans l'éditeur de texte pour faire une recherche. Et quand je voie où il est, il fait partie des trucs que j'ai lue attentivement sans comprendre et je l'ai pas retenue.

 \0     ASCII NUL.

Je sais que l'ascii est le codage des caractères, mais je ne comprend pas quel est la fonction du paramètre.

Vu que j’étais bloqué sur les dates j'ai regardé aussi le l'ordre. Et sort :

       -z, --zero-terminated
              line delimiter is NUL, not newline

j'ai l'impression que sa gère un cas que j'ai pas réussis a voir.
KEYDEF j'ai pas commencé a chercher encore mais vu la lecture du man y a des chances que je demande aussi de l'aide plus tard.

Est ce que la gestion des espaces va être compliqué ? Dans le terminal il suffit de rajouter "" mais j'ai l'impression que j'ai des soucis dès le find -prindf :

#!/bin/bash
date_form=%F_%T			# format de date longue
# date_form=%Y%m%d-%H%M%S	# format de cate courte
echo -e "********************************************************************************\n"$(date +"$date_form")"\n********************************************************************************\n"
while IFS=' ' read -d '' t_access t_modification t_change cible c_type	# t_change2
do
#	echo $c_type "test"
	echo -e $c_type "	" $cible # "\n"
done < <(find -printf '%A@ %T@ %C@ %p %y\0' | sort -z -k1,2n)	#%t
# %p     File's name.
# %y     File's type (like in ls -l), U=unknown type (shouldn't happen)
********************************************************************************
2021-04-06_22:04:02
********************************************************************************

f 	 ./2021-04-05_13-32-53_serveur_2013-10-02_18-26.rnd
(copie).rnd f 	 ./2021-04-05_13-29-24_b-copié-autre-disque/2021-04-05_13-32-53_serveur_2013-10-02_18-26
f 	 ./2021-04-05_13-29-24_b-copié-autre-disque/2021-04-05_13-32-53_serveur_2013-10-02_18-26.rnd
(copie renomer).rnd f 	 ./2021-04-05_13-29-24_b-copié-autre-disque/2021-04-05_13-35-58_serveur_2013-10-02_18-26
f 	 ./a_2021-04-05_13:46:42_d/a_2021-04-05_14:00:29.txt
f 	 ./a_2021-04-05_13:46:42_d/b_2021-04-05_14:01:18
f 	 ./a_2021-04-05_13:46:42_d/z_2021-04-05_14:03:00
f 	 ./a_2021-04-05_13:46:42_d/0_2021-04-05_14:03:25
f 	 ./a_2021-04-05_13:46:42_d/9_2021-04-05_14:03:32
f 	 ./a_2021-04-05_13:46:42_d/a_2021-04-05_14:04:15/a_2021-04-05_14:06:47
f 	 ./a_2021-04-05_13:46:42_d/a_2021-04-05_14:04:15/c_2021-04-05_14:06:56
f 	 ./a_2021-04-05_13:46:42_d/a_2021-04-05_14:04:15/z_2021-04-05_14:07:02
f 	 ./a_2021-04-05_13:46:42_d/a_2021-04-05_14:04:15/a_2021-04-05_14:06:12/z_2021-04-05_14:07:43
f 	 ./a_2021-04-05_13:46:42_d/a_2021-04-05_14:04:15/a_2021-04-05_14:06:12/b_2021-04-05_14:07:49
f 	 ./a_2021-04-05_13:46:42_d/a_2021-04-05_14:04:15/a_2021-04-05_14:06:12/a_2021-04-05_14:07:57
f 	 ./a_2021-04-05_13:46:42_d/a_2021-04-05_14:04:15/a_2021-04-05_14:06:12/a_2021-04-05_14:08:36/z_2021-04-05_14:09:59
f 	 ./a_2021-04-05_13:46:42_d/a_2021-04-05_14:04:15/a_2021-04-05_14:06:12/a_2021-04-05_14:08:36/c_2021-04-05_14:10:15
f 	 ./a_2021-04-05_13:46:42_d/a_2021-04-05_14:04:15/a_2021-04-05_14:06:12/a_2021-04-05_14:08:36/a_2021-04-05_14:10:27
f 	 ./a_2021-04-05_13:46:42_d/d1_2021-04-05_14:14:15
f 	 ./a_2021-04-05_13:46:42_d/d2_renomé_2021-04-05_14:14:15_141504
f 	 ./a_2021-04-05_13:46:42_d/d3_modifié_2021-04-05_14:14:15
d 	 ./a_2021-04-05_13:46:42_d
d 	 ./2021-04-05_13-28-37_c_13-45-47
d 	 ./2021-04-05_13:44:21_a
d 	 .
d 	 ./a_2021-04-05_13:46:42_d/0_2021-04-05_14:03:53
d 	 ./a_2021-04-05_13:46:42_d/9_2021-04-05_14:04:01
d 	 ./a_2021-04-05_13:46:42_d/c_2021-04-05_14:04:26
d 	 ./a_2021-04-05_13:46:42_d/z_2021-04-05_14:04:36
d 	 ./a_2021-04-05_13:46:42_d/a_2021-04-05_14:04:15/b_2021-04-05_14:06:19
d 	 ./a_2021-04-05_13:46:42_d/a_2021-04-05_14:04:15/z_2021-04-05_14:06:28
d 	 ./a_2021-04-05_13:46:42_d/a_2021-04-05_14:04:15
d 	 ./a_2021-04-05_13:46:42_d/a_2021-04-05_14:04:15/a_2021-04-05_14:06:12/z_2021-04-05_14:08:19
d 	 ./a_2021-04-05_13:46:42_d/a_2021-04-05_14:04:15/a_2021-04-05_14:06:12/c_2021-04-05_14:08:27
d 	 ./a_2021-04-05_13:46:42_d/a_2021-04-05_14:04:15/a_2021-04-05_14:06:12
d 	 ./a_2021-04-05_13:46:42_d/a_2021-04-05_14:04:15/a_2021-04-05_14:06:12/a_2021-04-05_14:08:36/z_2021-04-05_14:09:19
d 	 ./a_2021-04-05_13:46:42_d/a_2021-04-05_14:04:15/a_2021-04-05_14:06:12/a_2021-04-05_14:08:36
d 	 ./0_2021-04-05_13:47:08_e
d 	 ./a_2021-04-05_13:46:42_d/a_2021-04-05_14:04:15/a_2021-04-05_14:06:12/a_2021-04-05_14:08:36/b_2021-04-05_14:09:26
d 	 ./a_2021-04-05_13:46:42_d/a_2021-04-05_14:04:15/a_2021-04-05_14:06:12/a_2021-04-05_14:08:36/a_2021-04-05_14:09:33
f 	 ./2021-04-05_13-29-24_b-copié-autre-disque/a_2020-06-12_11:00:58_r-m2021-04-05_17:42:29.jpg
f 	 ./2021-04-05_13-29-24_b-copié-autre-disque/b_2021-04-06_17:47:16_auto_copie.jpg
f 	 ./2021-04-05_13-29-24_b-copié-autre-disque/z_2021-04-06_17:54:24_auto_copie.mp3
f 	 ./2021-04-05_13-29-24_b-copié-autre-disque/0_2021-04-06_17:54:37_auto_copie.mp3
s p a c e.cbr f 	 ./2021-04-05_13-29-24_b-copié-autre-disque/9_2021-04-06_17:55:09_auto_copie_e
s p a c e.cbr f 	 ./2021-04-05_13-29-24_b-copié-autre-disque/5_2021-04-06_17:55:26_auto_copie_e
f 	 ./2021-04-05_13-29-24_b-copié-autre-disque/0_2021-04-06_17:55:39_auto_copie.mp4
f 	 ./2021-04-05_13-29-24_b-copié-autre-disque/c_2021-04-06_18:01:45_manuel.gnumeric
f 	 ./2021-04-05_13-29-24_b-copié-autre-disque/d_2021-04-06_18:03:05_manuel_éditer-ensuite.gnumeric
f 	 ./2021-04-05_13-29-24_b-copié-autre-disque/e_2021-04-06_18:11:21_auto_droit-changer-12.pdf
d 	 ./2021-04-05_13-29-24_b-copié-autre-disque
utilisateur@ordinateur:/rep-test$ ls /rep-test/2021-04-05_13-29-24_b-copié-autre-disque
 0_2021-04-06_17:54:37_auto_copie.mp3
 0_2021-04-06_17:55:39_auto_copie.mp4
'2021-04-05_13-32-53_serveur_2013-10-02_18-26 (copie).rnd'
 2021-04-05_13-32-53_serveur_2013-10-02_18-26.rnd
'2021-04-05_13-35-58_serveur_2013-10-02_18-26 (copie renomer).rnd'
'5_2021-04-06_17:55:26_auto_copie_e s p a c e.cbr'
'9_2021-04-06_17:55:09_auto_copie_e s p a c e.cbr'
 a_2020-06-12_11:00:58_r-m2021-04-05_17:42:29.jpg
 b_2021-04-06_17:47:16_auto_copie.jpg
 c_2021-04-06_18:01:45_manuel.gnumeric
 d_2021-04-06_18:03:05_manuel_éditer-ensuite.gnumeric
 e_2021-04-06_18:11:21_auto_droit-changer-12.pdf
 z_2021-04-06_17:54:24_auto_copie.mp3
utilisateur@ordinateur:/rep-test$
Watael a écrit :

ce n'est pas << puis (commande)
c'est < puis <(substitution de processus)

enfin la redirection de find même vers une boucle while peut poser problèmes si des noms de fichiers comportent un alinéa

Est ce qu'il a rajouter "IFS=' 'read -d ' '" c'est pour gérer l'espace, ou est ce qu'il veut dire que la "substitution de processus" pose obligatoirement ce soucis et que je devrais chercher a faire le "find | sort" en début de programme et faire rentrer le résultat dans un tableaux que je passe a read ?

Dernière modification par gascon (Le 07/04/2021, à 15:07)


se qui ne me tue pas me rend plus fort Tout seul on va plus vite, ensemble, on va plus loin. ^^

Hors ligne

#21 Le 07/04/2021, à 05:05

MicP

Re : Commande pour afficher arboressence des fichiers et dossiers

gascon a écrit :

Le man me donne pour read :

              -d delim
                     The  first character of delim is used to terminate the input line, rather than newline

Plus précisément, ça donne :

man bash a écrit :
…
       read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]
…
              -d delim
                     The first character of delim is used to terminate the input line, rather than newline.
                     If delim is the empty string, read will terminate a line when it reads a NUL character.
…

=======

gascon a écrit :

…KEYDEF j'ai pas commencé a chercher encore mais vu la lecture du man y a des chances que je demande aussi de l'aide plus tard. …

man sort a écrit :
…
       KEYDEF is F[.C][OPTS][,F[.C][OPTS]] for start and stop position, where F is a field number and C a character position in the field; both are origin 1, and the stop position defaults to the line's end.
         If neither -t nor -b is in effect, characters in a field are counted from the beginning of the preceding whitespace.
         OPTS is one or more single-letter ordering options [bdfgiMhnRrV], which override global ordering options for that key.
         If no key is given, use the entire line as the key.
         Use --debug to diagnose incorrect key usage.
         SIZE may be followed by the following multiplicative suffixes: % 1% of memory, b 1, K 1024 (default), and so on for M, G, T, P, E, Z, Y.
       *** WARNING *** The locale specified by the environment affects sort order.  Set LC_ALL=C to get the traditional sort order that uses native byte values.
…

=======

#!/bin/bash

starsLine="$(printf '*%.0s' $(seq $(tput cols)))"  # autant d'étoiles que de colonnes disponibles dans la fenêtre du terminal
starsLine="$(printf '*%.0s' $(seq 80))"            # ou alors juste 80 étoiles
date_form='%F_%T'

echo -e "$starsLine\n$(date +$date_form)\n$starsLine"

while IFS=' ' read -d '' t_access t_modification t_change c_type cible
do
    echo -e "$c_type\t$cible"
done < <(find -printf '%A@ %T@ %C@ %y %p\0' | sort -z -k1,2n)

Dernière modification par MicP (Le 07/04/2021, à 10:46)

Hors ligne

#22 Le 07/04/2021, à 15:28

gascon

Re : Commande pour afficher arboressence des fichiers et dossiers

Oui j'ai fait une erreur en fessant mon message mais j'avais bien lu la version complète.
Pareil pour KEYDEF j'ai lu mais je suis perplexe il faudra que je cherche un peu des explication avec des exemple en français si possible pour comprendre.

Merci c'est très beaux ce que tu me donne là et sa marche niquel. J'en conclu que mon soucis n'est pas les espaces mais que si je rajoute des variable je dois toujours laisser celle avec le chemin et le nom du fichier en dernier ?
Pour l'instant je recommence mon test avec les dates, et je verrai le reste ensuite.

Mon man est est bien différent :

read  [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt]
       [-t timeout] [-u fd] [name ...]
              One line is read from the standard input, or from the file descriptor  fd
              supplied  as  an argument to the -u option, split into words as described
              above under Word Splitting, and the first word is assigned to  the  first
              name,  the  second word to the second name, and so on.  If there are more
              words than names, the remaining words and  their  intervening  delimiters
              are  assigned  to  the last name.  If there are fewer words read from the
              input stream than names, the remaining names are assigned  empty  values.
              The  characters  in  IFS  are used to split the line into words using the
              same rules the shell uses  for  expansion  (described  above  under  Word
              Splitting).   The  backslash character (\) may be used to remove any spe‐
              cial meaning for the next  character  read  and  for  line  continuation.
              Options, if supplied, have the following meanings:
              -a aname
                     The words are assigned to sequential indices of the array variable
                     aname, starting at 0.  aname is unset before any  new  values  are
                     assigned.  Other name arguments are ignored.
              -d delim
                     The  first character of delim is used to terminate the input line,
                     rather than newline.
              -e     If the standard input is coming from  a  terminal,  readline  (see
                     READLINE  above)  is  used  to obtain the line.  Readline uses the
                     current (or default, if line editing was  not  previously  active)
                     editing settings.

Dernière modification par gascon (Le 07/04/2021, à 15:39)


se qui ne me tue pas me rend plus fort Tout seul on va plus vite, ensemble, on va plus loin. ^^

Hors ligne

#23 Le 07/04/2021, à 17:50

Watael

Re : Commande pour afficher arboressence des fichiers et dossiers

si je rajoute des variable je dois toujours laisser celle avec le chemin et le nom du fichier en dernier ?

oui.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne