#1 Le 20/10/2021, à 07:44
- fplus39
bash : tronquer chaine de caractères
bonjour tout le monde,
Dans un script :
#!/bin/bash
echo "Recherche des Fichiers dans /Input..."
for i in /home/myuser/Documents/myfolder01/myfolder02/Input/*
do
echo " Récupération du nom des fichiers..."
result= 'echo "${$i##/}"'
echo "Resultat = " $result
echo "==========================================="
echo "Traitement des fichiers..."
/home/myuser/Documents/folder01/folder02/mycommand -k -i $i -o "/home/myuser/Documents/folder01/folder02/Output/"$result -m "/home/myuser/Documents/folder01/folder02>
echo "==========================================="
echo "Nettoyage du dossier Input"
rm "$i"
done
echo "==========================================="
echo "Archivage des Logs"
mv *CLLog*.txt /home/myuser/Documents/folder01/folder02/logs
echo "Fin du Script"
j'ai besoin de récupérer le nom des fichiers seuls, afin de la transférer, après traitement dans Output.
J'essaie donc de récupérer dans $result la valeur de $i à laquelle je dois tronquer le début de la chaine jusqu'au dernier slash inclus.
quand je fais
result= 'echo "${$i##/}"'
J'obtiens l'erreur :
echo "${$i##/}": Aucun fichier ou dossier de ce type
Pourriez-vous m'aider à corriger mon erreur, svp?
Merci beaucoup et bonne journée
Hors ligne
#2 Le 20/10/2021, à 08:07
- Hizoka
Re : bash : tronquer chaine de caractères
Salut,
"${i##*/}"
Fichier=/home/myuser/Documents/folder01/file1.ext
# Nom du fichier
echo "${Fichier##*/}"
# Extension du fichier
echo "${Fichier##*.}"
# Adresse du Fichier
echo "${Fichier%/*}"
EDIT : Correction des " manquants
Dernière modification par Hizoka (Le 20/10/2021, à 14:44)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#3 Le 20/10/2021, à 09:05
- Arbiel
Re : bash : tronquer chaine de caractères
Bonjour
Il manque un " à la fin des deux premières lignes de commande
arbiel@arbiel-NK3S-8-S4:~$ echo "${Fichier##*/}"
file1.ext
arbiel@arbiel-NK3S-8-S4:~$ echo "${Fichier##*.}"
ext
arbiel@arbiel-NK3S-8-S4:~$ echo "${Fichier%/*}"
/home/myuser/Documents/folder01
arbiel@arbiel-NK3S-8-S4:~$
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, GNOME 3.36.8
24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne
#4 Le 20/10/2021, à 14:44
- Hizoka
Re : bash : tronquer chaine de caractères
Corrigé, merci
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#5 Le 29/10/2021, à 14:46
- fplus39
Re : bash : tronquer chaine de caractères
bonjour,
du coup, j'ai été au plus simple pour moi, comme je suis en chemins absolus :
result=`echo $i | cut -c 54-`
Mais je vais quand même revenir dessus .
Merci pour votre aide
Hors ligne
#6 Le 29/10/2021, à 16:31
- LeoMajor
Re : bash : tronquer chaine de caractères
salut,
l'embarras du choix;
result=$(cut .... <<<"$i")
result=$(basename "$i")
i="/home/toto/Musique/song ping pong (copie).mp3"
if [[ "$i" =~ ^\/.*\/((.*)\.(.*)) ]]; then echo "${BASH_REMATCH[1]}, ${BASH_REMATCH[2]}, ${BASH_REMATCH[3]}"; fi
retourne song ping pong (copie).mp3, song ping pong (copie), mp3
variante hs
:~$ gbs3 -e "with file: print .basename(\"$i\"):print .name(\"$i\"):print .ext(\"$i\") : end with"
song ping pong (copie)
song ping pong (copie).mp3
mp3
Hors ligne
#7 Le 29/10/2021, à 17:39
- Hizoka
Re : bash : tronquer chaine de caractères
du coup, j'ai été au plus simple pour moi, comme je suis en chemins absolus :
result=`echo $i | cut -c 54-`
On utilise plus `` mais $()
le echo ne sert à rien et rajoute un pipe
result=$(cut -c 54- <<< "$i")
Et compter le nombre de caractère est franchement casse gueule...
Avec toutes les possibilités qu'il y a, tu n'as franchement pas fait un bon choix...
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#8 Le 29/10/2021, à 19:17
- Watael
Re : bash : tronquer chaine de caractères
result=${i:54}
mais non.
comme expliqué c'est maladroit.
ça, oui :
fname=${i##*/}
c'est beaucoup mieux.
Connected \o/
Welcome to sHell. · eval is evil.
En ligne