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 25/10/2020, à 09:08

Smwa

[RESOLU] Bash - lister une arborescence avec caractères accentués

Bonjour à toutes et à tous,

je suis nouvelle ici et totalement novice en Bash. Mes connaissances se limitent pour le moment aux commandes de bases (ls, find, grep, cut, find, file)

J'ai un petit projet à réaliser (cadre scolaire). Je ne cherche pas une solution toute faite clé en main, j'aimerai avant toute chose, comprendre ce que je fais et construire ma propre solution, en étant capable ensuite de l'expliquer et de la réappliquer dans le futur.
Je bloque au niveau de certaines commandes, et je ne trouve pas, même en épluchant la doc, ou différents sites, pourquoi elles agissent de telle ou telle manière, et comment correctement les exploiter.

Je vais expliquer avec des exemples, ce sera je pense plus pratique car je peine à m'expliquer techniquement.
Je voudrai parcourir des dossiers et récupérer une liste des fichiers contenus pour en extraire les données qui m'intéressent. Jusque là ça m'avait semblé réalisable. Par contre j'ai quelques soucis

Avec la commande

ls -lR -g -G -h --si "${PWD}"/*

J'obtiens le type de résultat suivant :

/home/moi/chemin/vers/mon/rep1:
total 3,5M
-rw-rw-r-- 1 282k sept. 20 13:19 fic1.blend
-rw-rw-r-- 1     92 sept. 20 13:20 trucAccentuées

/home/moi/chemin/vers/mon/rep1/srep1:
total 181k
-rw-rw-r-- 1  38k mars 20 13:15 page.html
-rw-rw-r-- 1 7,4k mars 20 13:16 photo.png

/home/moi/chemin/vers/mon/rep1/srep2:
total 2,6M
-rw-rw-r-- 1  228 mars 20 13:04 trucCompresse.tar.gz
-rw-rw-r-- 1 6,7k mars 20 13:16 gimg.png

Avec la commande suivante :

find . -name "*" -ls -type f

J'obtiens quelque chose qui se rapproche  de ce que je cherche car j'ai besoin du chemin d'accès par ligne, et je récupère ensuite les champs qui m'intéressent.
Mais les accents sautent ce qui me pose problème pour la suite.

644444      8 -rw-rw-r-- 1    moi     moi          1 282k mars 20 13:19 ./rep1/fic1.blend
644444      8 -rw-rw-r-- 1    moi     moi          92 mars 20 13:20 ./rep1/trucAccentu\303\251es

Avec la commande suivante :

find . -name "*" -type f

Je liste les chemins uniquement, mais je n'obtiens pas la taille des fichiers, par contre les accents cette fois ne sautent plus. (Je ne comprends d'ailleurs pas pourquoi le -ls dans la commande précédente fait sauter les accents)

./rep1/fic1.blend
./rep1/trucAccentuées

Je me suis donc dit que je pouvais à partir des chemins obtenus, utiliser une boucle pour en récupérer les données qui m'intéressent, mais la commande stat pour récupérer la taille me donne un résultat en byte, ce n'est pas ce que je veux obtenir et je n'arrive pas à exploiter correctement la commande stat..

Ce que j'aimerai obtenir c'est un résultat sous la forme
nomFichier     type       taille(ko, ou mo)        chemin
Sans que les accents ne sautent..
Je pense qu'il faut aussi que je gère les éventuels espaces dans un nom de fichier au même titre que les caractères accentués.

J'ai essayé de manipuler aussi la commande suivante pour gérer les accents.. mais en vain

iconv -f ISO-8859-1 -t UTF8 -o

je pense qu'il ne me manque pas grand chose, pour le moment je comprends ce que je veux faire et comment je dois le faire, mais même en épluchant les manuels de find, ls, stat, etc, je ne trouve pas comment exploiter au mieux les commandes que je connais, et gérer ce problème d'accent. (impossible d'utiliser la solution qui rename les fichiers en virant les accents car pas le droit de modifier les fichiers de test fournis)
Auriez vous des pistes pour m'aiguiller s'il vous plaît ?

Un grand merci de m'avoir lue, et une bonne journée à tout le monde !

Dernière modification par Smwa (Le 25/10/2020, à 13:57)

Hors ligne

#2 Le 25/10/2020, à 09:54

bruno

Re : [RESOLU] Bash - lister une arborescence avec caractères accentués

Bonjour,

Smwa a écrit :

Je ne comprends d'ailleurs pas pourquoi le -ls dans la commande précédente fait sauter les accents

man find a écrit :

       -ls, -fls
              Tout  caractère  inhabituel est toujours protégé. Les espaces, les barres obliques inverses et les guille‐
              mets sont affichés selon les conventions des échappements du C  (« \f »,« \" »,  par  exemple).  Tous  les
              autres  caractères  inhabituels  sont affichés en octal. Tous les autres caractères affichables (en ce qui
              concerne -ls et -fls, il s'agit des caractères dont le code octal est compris entre 041 et 0176) sont  af‐
              fichés en l'état.

Smwa a écrit :

Ce que j'aimerai obtenir c'est un résultat sous la forme
nomFichier     type       taille(ko, ou mo)        chemin

Un truc du style :

find . -maxdepth 1 -printf "%f %y %k %p\n"

cf man find

Dernière modification par bruno (Le 25/10/2020, à 14:11)

#3 Le 25/10/2020, à 13:56

Smwa

Re : [RESOLU] Bash - lister une arborescence avec caractères accentués

Merci beaucoup pour votre réponse rapide.
Cela m'a permis de récupérer les éléments dont j'avais besoin pour la suite du travail et je comprend mieux l'histoire des caractères!!

Bonne journée !

Hors ligne