Chcę dodać datę obok nazwy pliku ("somefile.txt"). Na przykład: somefile_25-11-2009.txt lub somefile_25Nov2009.txt lub coś podobnego do tego
Może skrypt wykona lub jakieś polecenie w oknie terminala. Używam systemu Linux (Ubuntu).
Z góry dziękuję.
oh prawie zapomniałem dodać, że skrypt lubpolecenie powinno zaktualizować nazwę pliku do nowej daty za każdym razem, gdy chcesz zapisać plik w określonym folderze, ale zachowując poprzednie pliki. Tak więc w folderze pojawią się takie pliki: filename_18Oct2009.txt, filename_9Nov2009.txt, filename_23Nov2009.txt
Odpowiedzi:
32 dla odpowiedzi nr 1Tutaj są dwa problemy.
1. Pobierz datę jako ciąg
To całkiem proste. Po prostu użyj date
polecenie z +
opcja. Możemy użyć zwrotnych, aby uchwycić wartość w zmiennej.
$ DATE=`date +%d-%m-%y`
Możesz zmienić format daty, używając innego %
opcje jak wyszczególniono w data man page.
2. Podziel plik na nazwę i rozszerzenie.
To trochę trudniejsze. Jeśli pomyślimy, że będą tylko jednym .
w nazwie pliku możemy użyć cut
z .
jako ogranicznik.
$ NAME=`echo $FILE | cut -d. -f1
$ EXT=`echo $FILE | cut -d. -f2`
Jednak to nie zadziała z wieloma .
w nazwie pliku. Jeśli używamy bash
- którym prawdopodobnie jesteś - możemy użyć niektórych magia bash, która pozwala nam dopasowywać wzorce, gdy robimy zmienną ekspansję:
$ NAME=${FILE%.*}
$ EXT=${FILE#*.}
Łącząc je otrzymujemy:
$ FILE=somefile.txt
$ NAME=${FILE%.*}
$ EXT=${FILE#*.}
$ DATE=`date +%d-%m-%y`
$ NEWFILE=${NAME}_${DATE}.${EXT}
$ echo $NEWFILE
somefile_25-11-09.txt
A jeśli mniej martwimy się o czytelność, wykonujemy całą pracę w jednym wierszu (z innym formatem daty):
$ FILE=somefile.txt
$ FILE=${FILE%.*}_`date +%d%b%y`.${FILE#*.}
$ echo $FILE
somefile_25Nov09.txt
23 dla odpowiedzi nr 2
Możesz użyć zwrotnych.
$ echo "myfilename-"`date +"%d-%m-%Y"`
Wydajność:
myfilename-25-11-2009
10 dla odpowiedzi nr 3
cp somefile somefile_`date +%d%b%Y`
0 dla odpowiedzi nr 4
nieco bardziej zawiłe rozwiązanie, które w pełni pasuje do twojej specyfikacji
echo `expr $FILENAME : "(.*).[^.]*"`_`date +%d-%m-%y`.`expr $FILENAME : ".*.([^.]*)"`
gdzie pierwszy "wyra" wypakowuje nazwę pliku bez rozszerzenia, drugi "wyra" wypakowuje rozszerzenie