W systemie Linux, jak utworzyć plik o nazwie zawierającej aktualną datę i godzinę

12

Chcę utworzyć plik, którego nazwą będzie bieżąca data i godzina. Mogę utworzyć plik za pomocą touchpolecenia. Mogę również uzyskać aktualny czas za pomocą datepolecenia. Więc myślę, że muszę jakoś przesłać drugie polecenie do pierwszego. Jak mogę to zrobić?

Der Hochstapler
źródło

Odpowiedzi:

19

Użyj wartości zwracanej z wyrażenia powłoki jako argumentu do touch:

touch $( date '+%Y-%m-%d_%H-%M-%S' )

Wynik: plik o nazwie np 2012-03-11_14-33-53.

Ta odpowiedź zakłada, że ​​używasz bash(jest to opisane w mansekcji strony Zastępowanie poleceń ), ale inne powłoki będą działać tak samo lub tylko nieznacznie inaczej.

Daniel Beck
źródło
@MdGao I opisane w tej samej sekcji strony podręcznika. Wolę odpowiedź, którą podałem, oto kilka powodów
Daniel Beck
Usunąłem swój komentarz, ponieważ Markdown złamał backticks. dzięki za link @DanielBeck
Mengdi Gao
2
@gasan Wystarczy otoczyć go "cudzysłowami. Można sobie wyobrazić wyjście datezastępując tę część wiersza polecenia, a touch Sun Mar 11 14:48:31 CET 2012stworzy nazwy plików Sun, Maritp touch "Sun Mar 11 14:48:31 CET 2012"drugiej strony działa prawidłowo (z wyjątkiem nie jestem pewien, jak dobre dwukropek będzie działać).
Daniel Beck
2
@gasan Pojedyncze cudzysłowy nie będą działać, ponieważ nie pozwalają na zastępowanie poleceń ani żadną inną interpretację. Zobacz cytowanie w instrukcji Bash.
slhck,
2
@gasan Różnica polega na tym, że treść pojedynczych cytatów nie jest oceniana. Wypróbuj za pomocą echo "$HOME"i echo '$HOME'. Dlatego zaproponowałem użycie ".
Daniel Beck
0

Możesz użyć prostszego polecenia

touch $(date | tr ' ' '-')
Omar Mardini
źródło
Nieco mniej elegancki i prawdopodobnie mniej przenośny, ale tak, to też zadziała.
Scott
OK, skoro wiem, że to czytasz, przejdę do bardziej szczegółowych informacji: odpowiedź Daniela daje wynik w znanym i całkowicie kontrolowanym formacie. (1) Dane wyjściowe z datezazwyczaj pokazują czas jako hh: mm: ss. Twoja odpowiedź powoduje, że nazwy plików zawierają dwukropki. Może to spowodować błąd w systemach plików opartych na systemie Windows. (2) Dane wyjściowe z prostego wywołania metody datezależą od ustawień regionalnych; tzn. dostosowane do lokalnego języka. Spróbować LANG=de_DE datei LANG=fr_FR datezobaczyć przykłady. … (Ciąg dalszy)
Scott
(Ciąg dalszy)… (2a) Dlatego w przypadku (mało prawdopodobnym?) Zmiany języka w systemie lub przekazania skryptu i zbioru plików danych komuś innemu, którego system jest skonfigurowany dla w innym języku nastąpi niedopasowanie. (Nie jestem pewien, czy byłby to prawdziwy problem, ale byłby to problem estetyczny.) (2b) Nie znam żadnych ustawień regionalnych, które to robią, ale teoretycznie może istnieć miejsce, w którym datezapisuje datę jako mm / dd / rr (lub dd / mm / rr). … (Ciąg dalszy)
Scott
(Ciąg dalszy)… Gdybyś kiedykolwiek spotkał taki system, miałbyś nazwy plików zawierające ukośniki, co spowoduje błędy. (3) Odpowiedź Daniela daje wynik, w którym porządek leksykograficzny (tj. Alfabetyczny), wytworzony przez lslub *, odpowiada porządkowi chronologicznemu. Po udzieleniu odpowiedzi wszystkie Fripliki znajdą się na początku listy posortowanej leksykograficznie Apri Augpojawią się przed wszystkimi pozostałymi miesiącami.
Scott