2009-11-25 13 views
16

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 effetAjouter la date au nom de fichier dans linux

Peut-être qu'un script va faire 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 doit mettre à jour le nom du fichier à une nouvelle date chaque fois que vous voulez enregistrer le fichier dans un dossier spécifique, mais en gardant toujours les fichiers précédents. Il y aurait donc des fichiers comme celui-ci dans le dossier: filename_18Oct2009.txt, filename_9Nov2009.txt, filename_23Nov2009.txt

+4

Vous pouvez aaaa-mm-jj au lieu de jj-mm-aaaa pour obtenir sorte lexicographique des noms de fichiers aussi Triez-les chronologiquement. – laalto

Répondre

20

Vous pouvez utiliser des guillemets.

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

Rendement:

myfilename-25-11-2009 
+0

Ceci ajoute la date au nom du fichier - dans l'exemple de la question, la date doit être * comprise entre * le nom du fichier et l'extension. –

+5

Cela a fonctionné pour moi: 'echo test>" data-csv - "\' date + "% Y-% m-% d" \ '" .txt "' –

+1

Ou: 'echo test>" data-csv- " \ 'date +"% Y-% m-% d.txt "\' ' –

10
cp somefile somefile_`date +%d%b%Y` 
31

Il y a deux problèmes ici.

1. Obtenir la date comme une chaîne

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

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

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

2. diviser un fichier en nom et extension.

Ceci est un peu plus compliqué. Si nous pensons qu'ils seront seulement un . 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 . au nom de fichier. Si nous utilisons bash - que vous êtes probablement - nous pouvons utiliser certains bash magic that allows us to match patterns when we do variable expansion:

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

En les mettant ensemble, 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 sommes moins préoccupés par la lisibilité, nous faisons tout le travail sur une ligne (avec un format de date différente):

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

Merci Dave mais comment ou où je lance ce script? Pardonnez-moi, je suis nouveau avec Linux. – sami

+0

Pouvez-vous donner plus de détails sur exactement ce que vous voulez faire. Vous avez donc un fichier dans un répertoire que vous voulez horodater de cette manière. Est-ce que c'est juste un fichier avec le même nom à chaque fois ou est-ce que ce pourrait être un certain nombre de fichiers avec un certain nombre de noms différents? –

+1

J'ai édité ma question sur le dessus, s'il vous plaît jeter un oeil à elle. – sami

0

un peu plus alambiquée solution qui correspond pleinement vos spécifications

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

où le premier « expr » extrait le nom de fichier sans extension, seconde « expr » extrait l'extension