/ / Dodaj datę do pliku w systemie Linux - linux, ubuntu, append, rename, nazwy plików

Dołącz datę do pliku w linux - linux, ubuntu, append, zmień nazwę, nazwy plików

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 1

Tutaj 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