Jak wstawić datę i godzinę w nazwie pliku?

23

Próbuję wykonać polecenie i chciałbym umieścić datę i godzinę w nazwie pliku wyjściowego.

Oto przykładowe polecenie, które chciałbym uruchomić.

md5sum /etc/mtab > 2016_4_25_10_30_AM.log

Format daty i godziny może być dowolny z podkreślnikami. Nawet UTC, jeśli nie można użyć AM i PM.

lepkość
źródło
Jeśli nie Bash, to jakiej powłoki używasz?
Ryan,
Och, to jest bash ... Miałem na myśli skrypt bash *
lep.
Nie potokujesz, przekierowujesz. Pytanie byłoby takie samo, gdybyś nie przekierowywał. Aktualizacja tytułu.
Mikel

Odpowiedzi:

46

Jeśli chcesz użyć bieżącej daty i godziny jako nazwy pliku, możesz użyć datei podstawić polecenia .

 $ md5sum /etc/mtab > "$(date +"%Y_%m_%d_%I_%M_%p").log"

Powoduje to, że plik 2016_04_25_10_30_AM.log(chociaż z bieżącą datą) jest tworzony z hashem md5 /etc/mtabjako jego zawartością.

Pamiętaj, że nazwy plików zawierające 12-godzinne znaczniki czasu w formacie prawdopodobnie nie będą sortowane według nazw w sposób, w jaki chcesz, aby były sortowane. Możesz uniknąć tego problemu, używając zamiast tego 24-godzinnych znaczników czasu.

Jeśli nie masz wymogu używania tego określonego formatu daty, możesz rozważyć użycie formatu daty i godziny zgodnego z ISO 8601. Niektóre przykłady generowania prawidłowych reprezentacji daty i godziny ISO 8601 obejmują:

 $ date +"%FT%T"
 2016-04-25T10:30:00

 $ date +"%FT%H%M%S"
 2016-04-25T103000

 $ date +"%FT%H%M"
 2016-04-25T1030

 $ date +"%Y%m%dT%H%M"
 20160425T1030

Jeśli chcesz mieć „bezpieczniejsze” nazwy plików (np. Dla kompatybilności z Windows), możesz pominąć dwukropki z określonego przedziału czasu.

Należy pamiętać, że wszystkie powyższe przykłady zakładają lokalny czas systemowy. Jeśli potrzebujesz reprezentacji czasu spójnej dla różnych stref czasowych, powinieneś określić przesunięcie strefy czasowej lub UTC. Można uzyskać przesunięcie strefy czasowej zgodne z normą ISO 8601, używając „% z” w części formatu datepołączenia w następujący sposób:

 $ date +"%FT%H%M%z"
 2016-04-25T1030-0400

Możesz uzyskać czas UTC w swoim datewywołaniu, określając -uflagę i dodając „Z” na końcu ciągu datetime, aby wskazać, że czas jest UTC w następujący sposób:

 $ date -u +"%FT%H%MZ"
 2016-04-25T1430Z
Ryan
źródło
@Mikel Czy ty i ja dokonaliśmy edycji krzyżowej?
Ryan,
Możliwie. Właśnie zmieniłem „podpowłokę” na „podstawianie poleceń”. Skończyłem, więc edytuj, jak chcesz.
Mikel
@Mikel Nie ma problemu. Przesłałem ponownie swoją edycję.
Ryan,
@Mikel Bez obaw! W każdym razie powinienem pamiętać o tym, by nazywać to „zastępowaniem poleceń”. Dziękujemy za poprawę odpowiedzi!
Ryan,
3
Podkreślenie jest dziwną postacią. Preferowane jest stosowanie ISO-8601, $(date +%FT%T)który da 2016-04-25T10:30:00.
hschou