#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,
Je ne comprends d'ailleurs pas pourquoi le -ls dans la commande précédente fait sauter les accents
-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.
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