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 05/04/2017, à 12:04

DonutMan75

[BASH] Combiner les modificateurs ?

Bonjour,
j'essaie de "rendre beau" un petit script bash de ma composition.

dans le répertoire /users/donut/data/ se trouve des fichiers dont le nom suit le prototype suivant "SW_XXXX_MAG.cdf" ou "XXXX" est un nombre sur 4 chiffres.

J'aimerais faire une boucle sur ces fichiers pour récupérer, à chaque itération, "SW_XXXX". Donc le nom de fichier, sans l'arboresence, et en enlevant "_MAG.cdf" à la fin.

Voici mon prototype (fonctionnel) :

for f in /users/donut/data/*cdf ; do
    file=${f##*/} # permet d'enlever l'arborescence "/users/donut/data/"
    file=${file%_MAG.cdf} # permet d'enlever "_MAG.cdf" à la fin des fichiers
done

Je me demandais s'il existait une syntaxe bash permettant de combiner séquentiellement les modificateurs [##] et [%] sur une seule ligne ?

Bon sinon, j'ai bien une autre solution qui marche aussi et qui est :

for f in /users/donut/data/*cdf ; do
    file=$(basename "$f" "_MAG.cdf")
done

Mais je me demandais juste s'il était possible de faire aussi concis avec les modificateurs bash ? Je ne sais pas pourquoi mais ça me semble moins beau avec basename....

Merci d'avance pour vos retours smile

Bonne journée à tous

Hors ligne

#2 Le 05/04/2017, à 15:24

jamesbad000

Re : [BASH] Combiner les modificateurs ?

Bonjour

fred@Extensa:~$ echo $(basename /etc/defaut/grub)
grub

dirname permet de faire l'inverse (ne garder que le chemin d'accès)
et readlink permet de normaliser les chemin d'accès ou de résoudre les liens symboliques

fred@Extensa:~$ echo $(readlink -f ./Documents)
/home/fred/Documents

Edit: j'ai mal lu la question... Donc que je ne t'ai rien apprit...:rolleyes:

Dernière modification par jamesbad000 (Le 05/04/2017, à 15:26)


L'espace et le temps sont les modes par lesquels nous pensons, et non les conditions dans lesquelles nous vivons. (Signé Albert)

Hors ligne

#3 Le 05/04/2017, à 15:39

DonutMan75

Re : [BASH] Combiner les modificateurs ?

Hello jamesbad000,
merci pour ta réponse
et au contraire tu m'as appris qqch ! Je ne connaissais nu dirname ni readlink.
readlink me sera très probablement très utile pour la suite !
Sans le -f ceci dit, il ne me sort rien du tout.
Et j'avoue ne pas bien comprendre la différence entre les différentes options (-f, -e, -m etc...)

Merci pour ton retour en tout cas

Bonne fin d'aprem

Donut

Hors ligne

#4 Le 05/04/2017, à 15:55

jamesbad000

Re : [BASH] Combiner les modificateurs ?

-m s’accommode de chemin d'accès et fichiers inexistants

fred@Extensa:~$ echo $(readlink -m ./Docucu/fichierBidon)
/home/fred/Docucu/fichierBidon

-f supporte seulement un fichier inexistant
-e tous les éléments doivent exister


L'espace et le temps sont les modes par lesquels nous pensons, et non les conditions dans lesquelles nous vivons. (Signé Albert)

Hors ligne

#5 Le 05/04/2017, à 17:59

Hizoka

Re : [BASH] Combiner les modificateurs ?

Salut, je ne pense pas que ce soit possible de cumuler tes commandes, la seule chose possible, c'est de les mettre sur la même ligne mais ça n'aide pas à la lecture.
et comme toi j'ai une préférence pour ce genre de commande, c'est plus rapide et plus sympa que sed ou grep dans ce genre de cas.


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

Hors ligne