#1 Le 05/08/2009, à 12:00
- arieugon
[Résolu] Commande shell qui retourne l'extension d'un fichier
Bonjour à tous.
Je ne sais plus si il existe une commande qui permet d'extraire l'extension d'un fichier. Par exemple pour fichier.txt je voudrais que ça me retourne txt. Et tant qu'à faire si une autre commande pouvait me retourner le nom fichier ce serait le top.
Mais de mémoire je ne pense pas que ça exite, alors je vais certainement m'écrire un petit bout de code bash qui va me le faire si ça n'existe pas.
Merci de vos réponses.
Linuxement ;O)
Dernière modification par arieugon (Le 05/08/2009, à 12:57)
Portable ASUS K73E : Ubuntu XFCE 20.04 / Ubuntu DDE 20.04 / Debian 10 /Debian 11 (testing) / Devuan 3
Le tout en multi-boot Grub Legacy.
Hors ligne
#2 Le 05/08/2009, à 12:07
- clahor
Re : [Résolu] Commande shell qui retourne l'extension d'un fichier
bjr je crois qu'il faut voir du coté de basename & de dirname qui pour l'un extrait le nom complet & pour l'autre l'extension
Hors ligne
#3 Le 05/08/2009, à 12:08
- iuchiban
Re : [Résolu] Commande shell qui retourne l'extension d'un fichier
Si tu veux récupérer juste le nom du fichier, tu as basename.
Exemple :
$ dirname /un/long/chemin/vers/toto.txt
/un/long/chemin/vers
$ basename /un/long/chemin/vers/toto.txt
toto.txt
Pour avoir l'extension, le truc, c'est que les extensions n'ont aucun intérêt sous GNU/Linux.
Mais avec sed, tu peux avoir tout ce qui suit la dernière occurence de "."
Mais là, je suis pas assez calé pour te donner la commande
En cherchant un peu j'ai trouvé :
echo toto.doc.txt | sed 's/.*\.//g'
donc en gros tu peux faire un script dans lequel tu mets :
#!/bin/bash
echo $1 | sed 's/.*\.//g'
Il faut rendre le scipt exécutable :
chmod +x tonscript
puis tu fais un lien de ton script dans /usr/bin :
ln -s /chemin/de/ton/script /usr/bin/getextension
Puis tu peux ensuite faire :
getextension <Unfichier>
Dernière modification par iuchiban (Le 05/08/2009, à 12:18)
C'est depuis que Chuck Norris a laissé la vie sauve à un manchot que l'on dit que Linux est libre.
Chuck Norris n'a pas besoin d'éditer son premier message pour ajouter [Résolu]. Chuck Norris est toujours [Résolu], quoi qu'il arrive.
Hors ligne
#4 Le 05/08/2009, à 12:22
- arieugon
Re : [Résolu] Commande shell qui retourne l'extension d'un fichier
Merci de vos réponses
dirname et basename je connais mais ce n'est pas ce dont j'ai besoin. En fait je vais faire un petit bout de code bash du genre:
#echo $1 | awk -F. '{print $2}'.
C'est pas très pure car si il y a plusieurs point dans le nom. Mais ça rentre dans un script qui va m'extraire le son de fichiers vidéos. Je veux pouvoir le faire en ligne de commande, comme ça je traite des lots entiers en une seule fois.
Les extensions n'ont aucun intéret, c'est vrai, mais lorsque que tu as un fichier avec l'extension .mp4 ou .flv par exemple, ça te donne une indication sur ce que c'est comme fichier. En fonction de ça j'opèrerai des traitements différents. Voilà mon problème.
Portable ASUS K73E : Ubuntu XFCE 20.04 / Ubuntu DDE 20.04 / Debian 10 /Debian 11 (testing) / Devuan 3
Le tout en multi-boot Grub Legacy.
Hors ligne
#5 Le 05/08/2009, à 12:35
- AnsuzPeorth-out
Re : [Résolu] Commande shell qui retourne l'extension d'un fichier
Bjr,
avec sed pour recuperer l'extension (une possibilité parmis d'autres)
var="truc.machin.txt"
sed 's/^.*\(...$\)/\1/' <<< $var
ou en bash (une possibilité parmis d'autres)
echo ${var##*.}
et j'en passe
Ou sinon, tu peux voir avec la commande file, qui te donneras le type mime du fichier
Dernière modification par AnsuzPeorth-out (Le 05/08/2009, à 12:36)
Hors ligne
#6 Le 05/08/2009, à 12:36
- iuchiban
Re : [Résolu] Commande shell qui retourne l'extension d'un fichier
tu peux faire avec awk mais prends $NF plutôt que $2, sinon avec des fichiers du genre film.du.cinema.mp4 ben il te donne "du" comme extension.
C'est depuis que Chuck Norris a laissé la vie sauve à un manchot que l'on dit que Linux est libre.
Chuck Norris n'a pas besoin d'éditer son premier message pour ajouter [Résolu]. Chuck Norris est toujours [Résolu], quoi qu'il arrive.
Hors ligne
#7 Le 05/08/2009, à 12:57
- arieugon
Re : [Résolu] Commande shell qui retourne l'extension d'un fichier
Merci à vous deux.
Vous avez parfaitement répondu à ma question. la commande sed est puissante mais je n'arrive pas à m'y faire. Je veux dire que je n'arrive pas à l'utiliser moi-même. Mais là je vais utiliser ce que vous m'avez communiqué. C'est plus propre d'utiliser sed que le | awk.
Aller ! Je passe le post en Résolu. Merci encore.
Linuxement ;O)
Portable ASUS K73E : Ubuntu XFCE 20.04 / Ubuntu DDE 20.04 / Debian 10 /Debian 11 (testing) / Devuan 3
Le tout en multi-boot Grub Legacy.
Hors ligne
#8 Le 05/08/2009, à 13:20
- AnsuzPeorth-out
Re : [Résolu] Commande shell qui retourne l'extension d'un fichier
Attention qd meme, la commande sed ne recupere que les 3 derniers caracteres.
Pour plus de securite, awk ou la substitution bash est plus sur.
Perso, je prefere la substitution, ensuite la commande awk qui est plus courte et plus comprehensible que sed.
Hors ligne
#9 Le 05/08/2009, à 13:57
- nesthib
Re : [Résolu] Commande shell qui retourne l'extension d'un fichier
la commande suivante liste les fichiers du dossier en cours sur une ligne (-1) passe le résultat à sed qui récupère les lignes du style : [n'importe quoi = .*] [un point = \.] [n'importe quoi sans point = .*] [la fin de ligne = $]
et récupère seulement la partie [n'importe quoi sans point] qui est entre les " \( " et " \) " ( partie /\1/ ) et l'affiche (p)
ls -1 | sed -n 's/.*\.\(.*$\)/\1/p'
si tu veux une extension avec seulement des chiffres et lettres [a-Z0-9] tu peux essayer
ls -1 | sed -n 's/.*\.\([a-Z0-9]*$\)/\1/p'
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#10 Le 05/08/2009, à 15:15
- speculoos
Re : [Résolu] Commande shell qui retourne l'extension d'un fichier
Tu peux aussi créer un alias dans ton bashrc avec la commande que tu veux .
Hors ligne