2009-11-25 7 views
16

Ich möchte das Datum neben einem Dateinamen ("somefile.txt") hinzufügen. Zum Beispiel: Somefile_25-11-2009.txt oder Somefile_25Nov2009.txt oder irgendetwas zu diesem ZweckDatum an Dateiname in Linux anfügen

Vielleicht ein Skript wird oder ein Befehl im Terminal-Fenster. Ich benutze Linux (Ubuntu).

Vielen Dank im Voraus.

oh fast hätte ich vergessen hinzuzufügen, dass das Skript oder der Befehl den Dateinamen auf ein neues Datum aktualisieren soll, immer wenn Sie die Datei in einem bestimmten Ordner speichern wollen, aber die vorherigen Dateien behalten möchten. Es würde also Dateien wie diese im Ordner geben: filename_18Oct2009.txt, Dateiname_9Nov2009.txt, Dateiname_23Nov2009.txt

+4

können Sie wollen yyyy-mm-dd statt dd-mm-yyyy lexikographische Art von Dateinamen zu bekommen, um auch sortiere sie chronologisch. – laalto

Antwort

20

Sie können Backticks verwenden.

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

Ausbeuten:

myfilename-25-11-2009 
+0

Damit wird das Datum an den Dateinamen angehängt - im Beispiel in der Frage muss das Datum * zwischen * dem Dateinamen und der Erweiterung liegen. –

+5

Das funktionierte für mich: echo test> data-csv - \ datum +% y-% m-% d \ \ "txt" ' –

+1

Oder: echo test>" data-csv- " \ datum + "% Y-% m-% d.txt" \ " –

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

ist es hier zwei Probleme.

1. das Datum als String Get

Das ist ziemlich einfach. Verwenden Sie einfach den date Befehl mit der + Option. Wir können Backticks verwenden, um den Wert in einer Variablen zu erfassen.

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

Sie können das Format Datum ändern, indem verschiedene % Optionen wie auf der date man page beschrieben.

2. Teilen Sie eine Datei in Name und Erweiterung.

Dies ist ein bisschen komplizierter. Wenn wir denken, dass sie nur eine . im Dateinamen sind, können wir mit . als Trennzeichen verwenden.

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

Dies wird jedoch nicht mit mehreren . im Dateinamen arbeiten. Wenn wir verwenden bash - die Sie wahrscheinlich sind - wir können einige verwenden bash magic that allows us to match patterns when we do variable expansion:

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

Putting sie zusammen bekommen wir:

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

Und wenn wir weniger besorgt sind über die Lesbarkeit alles, was wir tun die Arbeit auf einer Linie (mit einem anderen Datumsformat):

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

Danke Dave aber Wie oder wo starte ich dieses Skript? Verzeih mir, ich bin neu mit Linux. – sami

+0

Können Sie genauer angeben, was Sie tun möchten. So haben Sie eine Datei in einem Verzeichnis, das Sie auf diese Weise mit Datum versehen möchten. Ist es nur eine Datei mit dem gleichen Namen jedes Mal oder könnte es eine Anzahl von Dateien mit einer anderen Nummer sein? –

+1

Ich habe meine Frage oben bearbeitet, bitte sehen Sie sie sich an. – sami

0

etwas gewundene Lösung, die vollständig Ihre spec entspricht

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

wo erst ‚expr‘ extrahiert ohne Verlängerung, zweit ‚expr‘ extrahiert Erweiterung