Actualiser un « for file in "${@}" » après un renommage

Bonjour à tous,

Je cherche à me faire un petit script pour automatiser les conversions de documents et images d’un format vers un autre en utilisant convert. Vous ne vous étonnerez pas, j’aime les scripts interactifs, j’aime quand la machine “parle”.

Je suis obligé de passer par deux étapes :

  1. Convertir
  2. Renommer (retirer l’ancienne extension du titre du fichier)

Dans le script, un premier « for file in “${@}” » considère les fichiers à convertir. Ce que je voudrais, c’est que la seconde commande ligne 19 me permette de désigner les mêmes fichiers alors que je viens de supprimer l’extension de leur titre (ex : toto.pdf --------> toto.)

#!/bin/bash
#Automatisation de convert (Imagemagick)
#
echo -e "\E[6;1m----- PROGRAMME DE CONVERSION IMAGE/DOCUMENT ------\E[6;0m" 
echo -e "\E[6;1mLes fichiers à convertir sont :\E[6;0m" 
for file in "${@}"   #Première commande
do echo -e "${file}"
done
echo -e "\E[6;1mVoulez-vous lancer la conversion ?\E[6;0m"
read choix
case $choix in
[OoYy]*) echo -e "\E[6;1mVers quel format ?\E[6;0m"
         read nextension
         echo -e "\E[6;1mProcédure préventive de renommage : Quel est le format actuel des fichiers ?\E[6;0m"
         read aextension
         rename 's/\.'$aextension'$/\./' *.$aextension
         echo -e "\E[6;1mExtension format supprimée du nom des fichiers\E[6;0m"
         echo -e "\E[6;1mVerbose de la conversion :\E[6;0m"         
         for file in "${@}" #Commande qui ne va pas ! Elle désigne des fichiers qui n'existent plus.
         do convert -verbose -density 1000x1000 "${file}" "${file}.${nextension}"
         done
         echo -e "\E[6;1mConversion terminées\E[6;0m"
         exit 0;;
[Nn]*) echo -e "\E[6;1mFichiers non convertis\nFin du programme\E[6;0m"
       exit 0;; 
esac

Je suis obligé de supprimer l’extension de manière “préventive”, car sinon j’obtiens, pour l’exemple d’une conversion de pdf vers pdf, un fichier « toto.pdf.pdf »… et pour faire comprendre à rename de renommer en masse les « *.pdf.pdf » en « *.pdf »…

Quelqu’un aurait-il une idée ?

PS : il s’agit de l’adaptation de ce script (même principe mais pour ffmpeg ) : Rename et $

Bonjour

#!/bin/bash
#Automatisation de convert (Imagemagick)
#
echo -e "\E[6;1m----- PROGRAMME DE CONVERSION IMAGE/DOCUMENT ------\E[6;0m" 
echo -e "\E[6;1mLes fichiers à convertir sont :\E[6;0m" 
for file in "${@}"   #Première commande
    do echo "${file}"
done
echo -e "\E[6;1mVoulez-vous lancer la conversion ?\E[6;0m"
read choix
case $choix in
[OoYy]*) echo -e "\E[6;1mVers quel format ?\E[6;0m"
         read nextension
         echo -e "\E[6;1mProcédure préventive de renommage : Quel est le format actuel des fichiers ?\E[6;0m"
         read aextension
         rename 's/\.'$aextension'$//' *.$aextension
         echo -e "\E[6;1mExtension format supprimée du nom des fichiers\E[6;0m"
         echo -e "\E[6;1mVerbose de la conversion :\E[6;0m"         
         for file in "${@/\.$aextension/}" #Commande qui va bien parce que ".$aextension" aura été enlevé de chaque élémént de la liste.
             do convert -verbose -density 1000x1000 "${file}" "${file}.${nextension}"
         done
         echo -e "\E[6;1mConversion terminées\E[6;0m"
         exit 0;;
[Nn]*) echo -e "\E[6;1mFichiers non convertis\nFin du programme\E[6;0m"
       exit 0;; 
esac

NOTE : J’ai aussi modifié la regex de la ligne de commande rename
de façon à ce que le caractère point du nom d’extension soit supprimé.

Bonjour @MicP,

Merci ! C’est exactement ça !
J’avais gardé le point, mais je peux aussi bien m’en passer.
Le programme convertit, renomme et supprime si on le souhaite les anciens fichiers.
Je le mets dans sa version complète.

Merci !

------------------------- Programme Image/Document -------------------------

#!/bin/bash
#Automatisation de convert (Imagemagick)
#
echo -e "\E[6;1m----- PROGRAMME DE CONVERSION IMAGE/DOCUMENT ------\E[6;0m" 
echo -e "\E[6;1mLes fichiers à convertir sont :\E[6;0m" 
for file in "${@}"
do echo -e "${file}"
done
echo -e "\E[6;1mVoulez-vous lancer la conversion ?\E[6;0m"
read choix
case $choix in
[OoYy]*) echo -e "\E[6;1mVers quel format ?\E[6;0m"
         read nextension
         echo -e "\E[6;1mProcédure préventive de renommage : Quel est le format actuel des fichiers ?\E[6;0m"
         read aextension
         rename 's/\.'$aextension'$//' *.$aextension
         #rename 's/\.'$aextension'$/\./' *.$aextension
         echo -e "\E[6;1mExtension format supprimée du nom des fichiers\E[6;0m"
         echo -e "\E[6;1mVerbose de la conversion :\E[6;0m"         
         for file in "${@/\.$aextension/}"
         do convert -verbose -density 1000x1000 "${file}" "${file}.${nextension}"
         done
         echo -e "\E[6;1mConversions terminées\E[6;0m";;
[Nn]*)   echo -e "\E[6;1mFichiers non convertis\nVoulez-vous renommer les fichiers ?\E[6;0m"
       read volonte
       case $volonte in
       [OoYy]*) echo -e "\E[6;1mQuelle est l'ancienne extension ?\E[6;0m" 
                read aextension
                echo -e "\E[6;1mQuelle est la nouvelle extension ?\E[6;0m"
                read nextension
                rename 's/\.'$aextension'.'$nextension'$/\.'$nextension'/' *.$aextension.$nextension
                echo -e "\E[6;1mFichiers renommés\E[6;0m" 
                echo -e "\E[6;1mSupprimer les anciens fichiers ?\E[6;0m"
                read supr
                case $supr in
                [OoYy]*) rm *.$aextension
                         echo -e "\E[6;1mFichiers supprimés\nFin du programme\E[6;0m"
                         exit 0;;
                [Nn]*) echo -e "\E[6;1mFin du programme\E[6;0m"
                       exit 0;;
                esac;;
       [Nn]*) echo -e "\E[6;1mFin du programme\E[6;0m"
              exit 0;;
       esac;;
esac
echo -e "\E[6;1mVoulez-vous supprimer les anciens fichiers ?\E[6;0m"
read volonte
case $volonte in
[OoYy]*) rm ${@/\.$aextension/}
         echo -e "\E[6;1mFichiers supprimés\nFin du programme\E[6;0m"
         exit 0;;
[Nn]*) echo -e "\E[6;1mFin du programme\E[6;0m"
       exit 0;;
esac

------------------------- Programme Audio/Vidéo -------------------------

#!/bin/bash
#Automatisation de ffmpeg
#
echo -e "\E[6;1m----- PROGRAMME DE CONVERSION AUDIO/VIDIO -----\E[6;0m" 
echo -e "\E[6;1mLes fichiers à convertir sont :\E[6;0m" 
for file in "${@}"
do echo -e "${file}"
done
echo -e "\E[6;1mVoulez-vous lancer la conversion ?\E[6;0m"
read choix
case $choix in
[OoYy]*) echo -e "\E[6;1mVers quel format ?\E[6;0m"
         read nextension
         for file in "${@}"
         do ffmpeg -i "${file}" "${file}.${nextension}"
         done
         echo -e "\E[6;1mConversion terminées\E[6;0m"
         echo -e "\E[6;1mSuppression de l'ancienne extension dans les titres.\nQuelle est-elle ?\E[6;0m";; 
[Nn]*) echo -e "\E[6;1mVoulez-vous renommer les fichiers ?\E[6;0m"
       read volonte
       case $volonte in
       [OoYy]*) echo -e "\E[6;1mQuelle est l'ancienne extension ?\E[6;0m" 
                read aextension
                echo -e "\E[6;1mQuelle est la nouvelle extension ?\E[6;0m"
                read nextension
                rename 's/\.'$aextension'.'$nextension'$/\.'$nextension'/' *.$aextension.$nextension
                echo -e "\E[6;1mFichiers renommés\E[6;0m" 
                echo -e "\E[6;1mSupprimer les anciens fichiers ?\E[6;0m"
                read supr
                case $supr in
                [OoYy]*) rm *.$aextension
                         echo -e "\E[6;1mFichiers supprimés\nFin du programme\E[6;0m"
                         exit 0;;
                [Nn]*) echo -e "\E[6;1mFin du programme\E[6;0m"
                       exit 0;;
                esac;;
       [Nn]*) echo -e "\E[6;1mFin du programme\E[6;0m"
              exit 0;;
       esac;;
esac
read aextension
rename 's/\.'$aextension'.'$nextension'$/\.'$nextension'/' *.$aextension.$nextension
echo -e "\E[6;1mSupprimer les anciens fichiers ?\E[6;0m"
read volonte
case $volonte in
[OoYy]*) rm *.$aextension
         echo -e "\E[6;1mFichiers supprimés\nFin du programme\E[6;0m"
         exit 0;;
[Nn]*) echo -e "\E[6;1mFin du programme\E[6;0m"
       exit 0;;
esac

EDIT : En fait, je rajouterai demain une commande lpr pour proposer l’impression des documents.

Petite astuce : ${file%.*} affiche le contenu de la variable $file après en avoir retiré le suffixe .*.

Exemple :

for file in foo.txt bar.mkv foobar.tar.gz; do
	echo "'$file' → '${file%.*}'"
done
'foo.txt' → 'foo'
'bar.mkv' → 'bar'
'foobar.tar.gz' → 'foobar.tar'
1 J'aime