web-dev-qa-db-fra.com

Ajouter la date au nom de fichier sous Linux

Je veux ajouter la date à côté d'un nom de fichier ("somefile.txt"). Par exemple: somefile_25-11-2009.txt ou somefile_25Nov2009.txt ou quoi que ce soit à cet effet

Peut-être qu'un script fera ou une commande dans la fenêtre du terminal. J'utilise Linux (Ubuntu).

Merci d'avance.

oh j'ai presque oublié d'ajouter que le script ou la commande devrait mettre à jour le nom de fichier à une nouvelle date chaque fois que vous souhaitez enregistrer le fichier dans un dossier spécifique tout en conservant les fichiers précédents. Il y aurait donc éventuellement des fichiers comme celui-ci dans le dossier: filename_18Oct2009.txt, filename_9Nov2009.txt, filename_23Nov2009.txt

25
sami

Il y a deux problèmes ici.

1. Obtenez la date sous forme de chaîne

C'est assez simple. Utilisez simplement la commande date avec la commande + option. Nous pouvons utiliser des backticks pour capturer la valeur dans une variable.

$ DATE=`date +%d-%m-%y` 

Vous pouvez modifier le format de la date en utilisant différents % options détaillées sur la page man date .

2. Fractionner un fichier en nom et extension

C'est un peu plus compliqué. Si nous pensons qu'ils ne seront qu'un seul . dans le nom de fichier, nous pouvons utiliser cut avec . comme délimiteur.

$ NAME=`echo $FILE | cut -d. -f1
$ EXT=`echo $FILE | cut -d. -f2`

Cependant, cela ne fonctionnera pas avec plusieurs . dans le nom du fichier. Si nous utilisons bash - ce que vous êtes probablement - nous pouvons utiliser un peu magie bash qui nous permet de faire correspondre les modèles lorsque nous faisons une expansion variable :

$ NAME=${FILE%.*}
$ EXT=${FILE#*.} 

En les assemblant, nous obtenons:

$ FILE=somefile.txt             
$ NAME=${FILE%.*}
$ EXT=${FILE#*.} 
$ DATE=`date +%d-%m-%y`         
$ NEWFILE=${NAME}_${DATE}.${EXT}
$ echo $NEWFILE                 
somefile_25-11-09.txt                         

Et si nous nous inquiétons moins de la lisibilité, nous faisons tout le travail sur une seule ligne (avec un format de date différent):

$ FILE=somefile.txt  
$ FILE=${FILE%.*}_`date +%d%b%y`.${FILE#*.}
$ echo $FILE                                 
somefile_25Nov09.txt
37
Dave Webb

Vous pouvez utiliser des backticks.

$ echo "myfilename-"`date +"%d-%m-%Y"`

Rendements:

myfilename-25-11-2009
31
miku
cp somefile somefile_`date +%d%b%Y`
15
Soufiane Hassou

une solution un peu plus compliquée qui correspond parfaitement à vos spécifications

echo `expr $FILENAME : '\(.*\)\.[^.]*'`_`date +%d-%m-%y`.`expr $FILENAME : '.*\.\([^.]*\)'`

où le premier "expr" extrait le nom du fichier sans extension, le second "expr" extrait l'extension

0
catwalk