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/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 smile

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 : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde 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 smile.

Hors ligne