Modifier l'extension des fichiers d'un dossier [Résolu/Fermé]

Signaler
Messages postés
708
Date d'inscription
mercredi 17 novembre 2004
Statut
Membre
Dernière intervention
15 mai 2020
-
Messages postés
35692
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
19 octobre 2020
-
Bonjour,

Existe-t-il une solution pour récupérer les noms de fichiers d"un dossier sans l'extension. Je cherche à supprimer l'extension d'une liste de fichier puis a redonner une nouvelle extension au fichier.
Comment puis je faire ??

source="/home/laurent/Images/diapos/2/"   
destination="/home/laurent/Images/diapos/2/3/"   
fichier_destination=DSC00   
ext=jpg   

nf () 
{ 
ls -l $source | grep '-' |  cut -c54,55,56,57,58,59,60,61 
} 

cd $source   
for fichier in * $(nf)    
do   
    #cp -v $fichier $destination$fichier.$ext   
    cp -v $fichier $destination$(nf).$ext   
done


Mes images
laurent@PC-ubuntu:~/bash/Ubuntu_12.04$ ls -F /home/laurent/Images/diapos/2/   
3/            PICT0003.JPG  PICT0006.jpg   PICT0008.JPG.  PICT0011.JPG.  PICT0014.JPG.  PICT0017.JPG.   
PICT0001.JPG  PICT0004.JPG  PICT0006.JPG   PICT0009.JPG.  PICT0012.JPG.  PICT0015.JPG.  PICT0018.JPG.   
PICT0002.JPG  PICT0005.JPG  PICT0007.JPG.  PICT0010.JPG.  PICT0013.JPG.  PICT0016.JPG.  PICT0019.JPG.   
laurent@PC-ubuntu:~/bash/Ubuntu_12.04$    
 



Merci

6 réponses

Messages postés
708
Date d'inscription
mercredi 17 novembre 2004
Statut
Membre
Dernière intervention
15 mai 2020
9
Re,

Non en fait ce que je cherche à savoir c'est si ces fichiers existent bel et bien et s'il faut aussi les renommer en supprimant le point final ?
Oui il existe bel et bien sur la carte sd de l'appareil photo, mais attention il change de nom de fichier en fonction du nombre de photos prises :
PICT0007.JPG PICT0008.JPG PICT0009.JPG PICT00010.JPG etc...

Oui les supprimer si possible de la sd carte de l'appareil photo une fois déplacer ou copier.

Pour mener à bien la conception d'un script (ou commande) il faut avoir toutes les cartes en main, sans quoi on a vite fait de patauger ;-\
Tout à fait d'accord avec vous.

Merci.
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

Messages postés
35692
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
19 octobre 2020
5 549
La solution de dubcek est la plus appropriée (je l'ai adoptée pour prendre en compte le point final) :

$ ls
PICT0001.JPG  PICT0005.JPG   PICT0008.JPG.  PICT0012.JPG.  PICT0016.JPG.
PICT0002.JPG  PICT0006.jpg   PICT0009.JPG.  PICT0013.JPG.  PICT0017.JPG.
PICT0003.JPG  PICT0006.JPG   PICT0010.JPG.  PICT0014.JPG.  PICT0018.JPG.
PICT0004.JPG  PICT0007.JPG.  PICT0011.JPG.  PICT0015.JPG.  PICT0019.JPG.

$ rename -n 's/\.JPG\.*$/.jpg/' *.JPG*
PICT0001.JPG renamed as PICT0001.jpg
PICT0002.JPG renamed as PICT0002.jpg
PICT0003.JPG renamed as PICT0003.jpg
PICT0004.JPG renamed as PICT0004.jpg
PICT0005.JPG renamed as PICT0005.jpg
PICT0006.JPG not renamed: PICT0006.jpg already exists
PICT0007.JPG. renamed as PICT0007.jpg
PICT0008.JPG. renamed as PICT0008.jpg
PICT0009.JPG. renamed as PICT0009.jpg
PICT0010.JPG. renamed as PICT0010.jpg
PICT0011.JPG. renamed as PICT0011.jpg
PICT0012.JPG. renamed as PICT0012.jpg
PICT0013.JPG. renamed as PICT0013.jpg
PICT0014.JPG. renamed as PICT0014.jpg
PICT0015.JPG. renamed as PICT0015.jpg
PICT0016.JPG. renamed as PICT0016.jpg
PICT0017.JPG. renamed as PICT0017.jpg
PICT0018.JPG. renamed as PICT0018.jpg
PICT0019.JPG. renamed as PICT0019.jpg

$

Si c'est bon, enlève le "-n".
Messages postés
35692
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
19 octobre 2020
5 549
Salut,

Pas la peine de tarabiscoter ton script de la sorte ;-\

Avec le remplacement des paramètres du shell (bash 4 je suppose), c'est faisable...

Quelques exemples :

$ var="/home/laurent/Images/diapos/2/PICT0001.JPG"

$ echo "${var%/*}"
/home/laurent/Images/diapos/2

$ echo "${var#*.}"
JPG

$ new_var="${var#*.}"

$ echo ${new_var}
JPG

$ echo ${new_var,,}
jpg

$

Par contre dans ton répertoire on voit des fichiers ayant un point final (PICT0007.JPG.), c'est quoi ce truc ?
Messages postés
18227
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 octobre 2020
5 036
hello
et avec (enlever le -n pour agir)
rename -n 's/PICT00/DCS00/;s/\.JPG/.jpg/' *.JPG
Messages postés
708
Date d'inscription
mercredi 17 novembre 2004
Statut
Membre
Dernière intervention
15 mai 2020
9
Bonjour Zipe31,

Par contre dans ton répertoire on voit des fichiers ayant un point final (PICT0007.JPG.), c'est quoi ce truc ?

L'objectif est de renommé l'extension des fichiers dans un dossier.
*.JPG ----> .jpg 
PICT0001.JPG ----> PICT0001.jpg
PICT0002.JPG ----> PICT0002.jpg
PICT0003.JPG ----> PICT0003.jpg
etc...


Car une fois les photos transférées de mon appareil photo sur mon disque dur les images ont l'extension "JPG", et quand je veux les publier sur le net, elle ne sont pas reconnu en tant que tel et suis obligé de les renommer en "jpg"manuellement a la main.

Version bash
laurent@PC-ubuntu:~/bash/Ubuntu_12.04$ bash --version 
GNU bash, version 4.2.24(1)-release (x86_64-pc-linux-gnu) 
Copyright (C) 2011 Free Software Foundation, Inc. 
Licence GPLv3+ : GNU GPL version 3 ou ultérieure <http://gnu.org/licenses/gpl.html> 
laurent@PC-ubuntu:~/bash/Ubuntu_12.04$ 


Je ne comprends pas trop bien comment utiliser dans mon script ce que vous me dites comme variable système.

Au début j'avais fait ceci mais je n'ai pas trouvé la solution à mon problème.
#! /bin/bash 
  
for fichier in $HOME/Images/diapos/2/* 
do 
    echo $(basename $fichier .${fichier##*.}) 
done


Merci.
Messages postés
35692
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
19 octobre 2020
5 549
Re-

L'objectif est de renommé l'extension des fichiers dans un dossier.
*.JPG ----> .jpg

Oui ça j'avais bien compris. Mais dans ton listing en fin de ton 1er message, certains fichiers ont un point final dans leur nom.
Donc est-ce vraiment le cas ? Il est important de le savoir, sans quoi toutes solutions apportées ne marcheront pas à 100%.

Pourquoi veux-tu déplacer les fichiers dans un nouveau répertoire ? Est-ce vraiment utile ?
Si ce n'est pas utile, la solution donnée par dubcek serait beaucoup plus adaptée à ton cas, sous réserve de ta réponse concernant le point final sur le nom de certains fichiers...
Messages postés
708
Date d'inscription
mercredi 17 novembre 2004
Statut
Membre
Dernière intervention
15 mai 2020
9
Re,

Vous voulez dire comme ceci :
"PICT0007.JPG."
Non c'est du a un erreur de test du script.
Il ne faut pas de point après l'extension ".JPG."

Pourquoi veux-tu déplacer les fichiers dans un nouveau répertoire ? Est-ce vraiment utile ?
Pour récupérer les photos sur la sd carte de l'appareil photo afin de les transférer vers mon disque dur avec la bonne extension.
/media/sdf /* sHOME/Images/photos/date/nom-fichier-image.jpg

Merci.
Messages postés
35692
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
19 octobre 2020
5 549
Non en fait ce que je cherche à savoir c'est si ces fichiers existent bel et bien et s'il faut aussi les renommer en supprimant le point final ?

Pour mener à bien la conception d'un script (ou commande) il faut avoir toutes les cartes en main, sans quoi on a vite fait de patauger ;-\
Messages postés
708
Date d'inscription
mercredi 17 novembre 2004
Statut
Membre
Dernière intervention
15 mai 2020
9
Re,

Merci Zipe31.
Voilà j'ai fini mon script.
Je le diffuse car j'ai le même problème avec des appareils photo (un Fuji et un Sony) y compris avec les scanners (un Brother, un Epson et un Medion).
Tout crée les images avec l'extension .JPG
Je pense que tout le monde doit avoir le me problème.
Intérêt de ce script :
- il renomme les images. JPG en images Jpg
- Vous pouvez modifier le chemin des dossiers sources et de destination par défaut directement dans le code.
- Vous pouvez indiquer depuis le shell l'emplacement des dossiers sources et de destination si ceux par défaut ne sont pas corrects.
- Si le l'emplacement des dossiers sources et de destination vous sont corrects, il vous suffit d'appuyer sur la touche Entrer.
Merci.

Code
#!/bin/bash
echo ""
echo "+---------------------------------------------------------------+"
echo "| Renomme l'extension des images JPG en jpg de l'appareil photo |"
echo "+---------------------------------------------------------------+"
echo "| Mis à jour : 11/02/2013                                       |"
echo "+---------------------------------------------------------------+"
echo ""

#---------- CONFIGURATION DES VARIABLE DU SCRIPT -----------
source_default="$HOME/Images/diapos/2/"
destination_default="$HOME/Images/diapos/2/3/"
corbeille="$HOME/.local/share/Trash/files/"

#---------- VERIFIE SI LE PAQUET EST INSTALLE -----------
paquet=trash-cli
dpkg --get-selections | grep -w ^$paquet[^-] >/dev/null
if [ 'echo $?' -eq 1 ]; then Code
	echo "le paquet $paquet n'est pas installé"
	echo "Veuillez installer le paquet $paquet pour continuer"
	echo "sudo apt-get install $paquet"
	exit 
	else 
	echo "Vérification OK........ Le paquet $paquet est installé"
fi
echo ""


echo "Veuillez indiquer le chemin la ou ce trouve les photos sur de la carte memoire de l\'appareil photo"
read -p "Par défault : $source_default appuyer sur la touche entrée si correct : " source_choisi
[ -n "$source_choisi" ] && source_default=$source_choisi
echo "Vous avez choisi : $source_default"
echo ""
echo "Veuillez indiquer le chemin ou placer les photo sur votre disque dur"
read -p "Par défault : $destination_default appuyer sur la touche entrée si correct : " destination_choisi
[ -n "$destination_choisi" ] && destination_default=$destination_choisi
echo "Vous avez choisi : $destination_default"


cp -v $source_default*.JPG $destination_default
echo ""

cd $destination_default
echo "Simulation des fichiers à renomer"
rename -n 's/\.JPG\.*$/.jpg/' *.JPG*

 echo ""
echo "Est-ce correct, voulez-vous continuer............ (o/n)"
read question1
case $question1 in
  y|Y|o|O) echo "Continuer........" 
	echo ""
	rename  's/\.JPG\.*$/.jpg/' *.JPG*
	echo "" 
	echo "Voici les fichiers renommer :"
	echo "Emplacement : $destination_default"
	ls 
	cd ~
	echo "Terminé"
	echo ""  ;;
  n|N)  echo "Annulé par l'utilisateur"
	echo ""
	cd ~ 
	exit ;;
  *)  echo "Erreur de frappe, touche incorrecte, veuillez recommencer !"  
	  exit ;;
esac 



echo "Faut il supprimer les images de l'appareil photo........................ (o/n)"
echo "ATTENTION, une fois les fichiers supprimez-vous pourrez les récupérer avec la corbeille !"
echo "Si la corbeille n'a pas été vidée entre-temps !"
echo ""

read -p "Êtes vous sûr de supprimer les images de l'appareil photo............ (o/n)" question2
		  case $question2 in
		  y|Y|o|O) echo "Suppression des fichiers *.JPG ........" 
		  echo ""
		  trash-put $source_default*.JPG
		  echo "" ;;
		  n|N)  echo "Suppression des fichiers annulé par l'utilisateur"
		  echo ""
		  cd ~ 
		  exit ;;
		  *)  echo "Erreur de frappe, touche incorrecte, veuillez recommencer !"  
		  exit ;;
esac
Messages postés
35692
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
19 octobre 2020
5 549
Merci ;-)