Modifier l'extension des fichiers d'un dossier

Résolu
xunil2003 Messages postés 766 Date d'inscription   Statut Membre Dernière intervention   -  
zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   -
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

  1. xunil2003 Messages postés 766 Date d'inscription   Statut Membre Dernière intervention   14
     
    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
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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".
      0
  2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    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 ?
    0
  3. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    hello
    et avec (enlever le -n pour agir)
    rename -n 's/PICT00/DCS00/;s/\.JPG/.jpg/' *.JPG
    
    0
  4. xunil2003 Messages postés 766 Date d'inscription   Statut Membre Dernière intervention   14
     
    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.
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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...
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. xunil2003 Messages postés 766 Date d'inscription   Statut Membre Dernière intervention   14
     
    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.
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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 ;-\
      0
  7. xunil2003 Messages postés 766 Date d'inscription   Statut Membre Dernière intervention   14
     
    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
    
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Merci ;-)
      0