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

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 smile


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 smile

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. mad
comme expliqué c'est maladroit.

ça, oui :

fname=${i##*/}

c'est beaucoup mieux. smile


Connected \o/
Welcome to sHell. · eval is evil.

En ligne