GNU/Linux >> Tutoriels Linux >  >> Linux

Linux :renommer le fichier mais conserver l'extension ?

Voici une réponse à la question bonus.

Je veux en fait mettre une date de création de photo dans son nom de fichier, pour obtenir quelque chose comme 20091231 2359 NewYear.jpg. J'ai peur d'avoir besoin d'une combinaison non triviale de commandes pour y parvenir ?

En supposant que vous souhaitiez prendre la date de création de la photo à partir des données EXIF, vous aurez besoin d'un outil séparé pour cela. Heureusement, il s'avère que jhead offre un moyen trivial de faire exactement ce que vous voulez, avec son -n option.

$ jhead -h
 [...]

 -n[format-string]

             Rename files according to date.  Uses exif date if present, file
             date otherwise.  If the optional format-string is not supplied,
             the format is mmdd-hhmmss.  If a format-string is given, it is
             is passed to the 'strftime' function for formatting
             In addition to strftime format codes:
             '%f' as part of the string will include the original file name
             [...]

Voici un exemple :

$ jhead -n%Y-%m-%d-%f New_year.jpg   
New_year.jpg --> 2009-12-31-New_year.jpg

Modifier  :Bien sûr, pour faire cela pour un tas de photos, ce serait quelque chose comme :

$ for i in *jpg; do jhead -n%Y-%m-%d-%f $i; done

Pour modifier le formatage de la date à votre convenance, jetez un œil à la sortie de date --help , par exemple; il listera les codes de format disponibles.

(jhead est largement disponible pour différents systèmes. Si vous êtes par exemple sur Ubuntu ou Debian, tapez simplement sudo apt-get install jhead pour l'installer.)


Pour la partie renommage uniquement, le programme 'renommer' fonctionnera. C'est le même que l'exemple que vous avez vu dans la page de manuel, juste inversé.

[email protected]:/tmp/q$ touch myfile.{a,b,c,d}
[email protected]:/tmp/q$ ls
myfile.a  myfile.b  myfile.c  myfile.d
[email protected]:/tmp/q$ rename -v s/myfile/yourfile/ myfile.*
myfile.a renamed as yourfile.a
myfile.b renamed as yourfile.b
myfile.c renamed as yourfile.c
myfile.d renamed as yourfile.d
[email protected]:/tmp/q$ ls
yourfile.a  yourfile.b  yourfile.c  yourfile.d
[email protected]:/tmp/q$ 

betelgeuse:tmp james$ ls myfile.* yourfile.*
ls: yourfile.*: No such file or directory   
myfile.a    myfile.b
betelgeuse:tmp james$ for file
> in myfile.*
> do
> mv "${file}" "`echo $file | sed 's/myfile\./yourfile./'`"
> done
betelgeuse:tmp james$ ls myfile.* yourfile.*
ls: myfile.*: No such file or directory
yourfile.a  yourfile.b

La clé est que, si vous avez vu un exemple qui montre comment mung une partie du nom de fichier avec une regex, c'est le seul exemple dont vous avez besoin. Les extensions n'ont pas de statut spécial sur les systèmes de fichiers Unix - elles ne sont qu'une partie du nom de fichier qui se trouve après un . caractère.


Linux
  1. Renommer un fichier dans le terminal Linux

  2. Linux - Tout est un fichier ?

  3. Existe-t-il une commande linux comme mv mais avec regex ?

  4. Renommer récursivement les fichiers (changer l'extension) sous Linux

  5. logrotate :conserve les N fichiers les plus récents, mais ne les renomme pas

Commande tactile Linux

Commande Cat sous Linux

Commande de fichier Linux

Comment renommer un ou plusieurs fichiers sous Linux

Comment renommer des fichiers et des répertoires sous Linux

Linux renommer l'extension de plusieurs fichiers