Muszę wykonać kopię zapasową pliku i chciałbym mieć znacznik czasu jako część nazwy, aby ułatwić rozróżnienie.
Jak wstawisz bieżącą datę do polecenia kopiowania?
[root@mongo-test3 ~]# cp foo.txt {,.backup.`date`}
cp: target `2013}' is not a directory
[root@mongo-test3 ~]# cp foo.txt {,.backup. $((date)) }
cp: target `}' is not a directory
[root@mongo-test3 ~]# cp foo.txt foo.backup.`date`
cp: target `2013' is not a directory
touch foo`date +%F`
działa dobrze.csh
skorupie...
) zamiast$(..)
. Powłoki C najwyraźniej nie obsługują tego zapisu dla podpowłok.To rozwija się do czegoś takiego
cp foo.txt .backup.Thu Oct 17 01:02:03 GMT 2013
. Spacja przed nawiasami klamrowymi rozpoczyna nowe słowo.Nawiasy klamrowe są osobnymi słowami, więc są interpretowane dosłownie. Ponadto
$((…))
jest składnią interpretacji arytmetycznej; wynikdate
jest niczym wyrażenie arytmetyczne. Zastąpienie polecenia wykorzystuje pojedynczy zestaw nawiasach:$(date)
.Bliższy. Mógłbyś to wyrazić za pomocą nawiasów klamrowych jako
cp foo.{txt,.backup.`date`}
. Nadal występuje problem polegający na tym, że dane wyjściowedate
zawierają spacje, dlatego należy je umieścić w podwójnych cudzysłowach. To by działało:lub
Domyślny format wyjściowy
date
nie jest dobrze dopasowany do nazwy pliku, a może nawet nie działać, jeśli ustawienia narodowe używają/
znaków w domyślnym formacie wyjściowym. Użyj formatu daty YMD, aby porządek leksykograficzny w nazwach plików był porządkiem chronologicznym (a także aby uniknąć niejednoznaczności między amerykańskimi i międzynarodowymi formatami dat).źródło
Jeśli naprawdę chcesz użyć pełnej daty, powinieneś chronić backtick. Format z tą datą polega na tym, że ma osadzone spacje, co jest nie-nie w powłoce uniksowej, chyba że umieścisz je w cudzysłowie (lub unikniesz ich w inny sposób).
Wolę jednak używać krótszego formatu ISO:
źródło
Użyj funkcji, która ułatwi Ci życie. Oto, czego używam:
źródło
Jak
date
ma domyślnie białe znaki na wyjściu, twoje ostatnie polecenie nie powiodło się. Jeśli zacytowałeś ostatni argument w środku"
, powinien on zadziałać. Inne próby mają niewłaściwą składnięOto możliwe rozwiązanie bez białych znaków:
lub
Jeśli dodasz
do swojego
.bashrc
i ponownie się zalogować / pozwól, aby bash ponownie go przeczytał, wystarczy zadzwonićbk file.txt
.źródło
--iso-8601
przełącznika, więc umieściłem tutaj link. Opcje daty GNU: --iso-8601Plik jest kopiowany do pliku kopii zapasowej, którego nazwa jest tworzona z dołączonym znacznikiem czasu
LUB:
Możesz wyświetlić zawartość pliku za pomocą „cat” i przekierować wyjście do pliku kopii zapasowej, którego nazwa jest tworzona z dołączonym znacznikiem czasu
Możesz także użyć większej liczby opcji sterowania FORMATEM, zależnie od potrzeb, np.% H,% M,% S itp.
źródło
cat
przekierowaniacp
?W bash możesz wpisać:
Który rozwija się do:
Wynikające z:
Wołowina jest
date -Is
. Lubię go używać, ponieważ łatwo go zapamiętać, pisać i zezwalać na krótkie wersje (np.-In
Jeśli jesteś maniakiem precyzji).!
uruchamia oznaczenie zdarzenia:I
$
jest desygnatorem słowa:źródło
Kiedy muszę wykonać kopię zapasową pliku, zwykle robię to w ten sposób.
cp foo.txt foo.backup.$(date +%F).txt
ls -l
foo.txt foo.backup.2017-9-19.txt
źródło
%F
format daty generuje dwucyfrowe miesiące ils -l
zwykle daje trochę więcej informacji niż tylko nazwy plików.Jeśli chcesz tylko wykonać kopię zapasową pliku lub katalogu, to po co również wpisz miejsce docelowe, po prostu użyj rozszerzenia powłoki, aby dodać datę na końcu nazwy pliku kopii.
to znaczy
Co skutkuje w
lub po prostu użyj
Dodaj datę, aby dostosować ją do swoich potrzeb. :)
źródło