Linux дата названия файла

Get today’s date and use it in filename

Using the command-line, I want to create a log file with today’s date in the name (for example, today is 05/17/2011, so the filename would have to be log051711 ). I know how to create the file ( touch filename ), but I don’t know how to get today’s date. I have looked at the manual for date , but it seems that I can’t really format its output? Any help would be appreciated.

5 Answers 5

You can format the output using the ‘+FORMAT’ parameter, e.g.

See the manpage for what sequences you can use in FORMAT.

I just figured out that to use this in a cron job, I had to escape the %-signs, so that it read: touch «log$(date +’\%m\%d\%y’)»

True.. MyFileName is just a prefix.. If needed we can keep it, else.. echo date +»%d-%m-%Y» this is enough. it will print only date 21-02-2014

Ah, now I see: I got confused because the ` did not appear in your answer. This is because they are used by askubuntu to indicate code blocks. You should mark code by either surrounding it with backticks or by indenting the paragraph with the code with 4 spaces. For starters you probably should use the menu above the editor for that and check your post in the preview below the textbox before submitting.

One of the possible soultions:

I’m sure somebody else has a better way to do this but assuming you want month-day-year this should work:

and you can reorder the %m, %d, %Y to reflect the ordering you want. The man page for date tells you more about additional formats.

Python can do this job as well. The small script for that would be the following:

#!/usr/bin/env python import time,os date=time.gmtime() month = str(date.tm_mon).zfill(2) day=str(date.tm_mday).zfill(2) year=str(date.tm_year)[-2:] fname = 'log' + month + day + year with open(fname,'a') as f: os.utime(fname,None) 

The idea here is simple: we use time.gmtime() to get current date, extract specific fields from the structure it returns, convert appropriate fields to strings, and create filename with the resulting name.

$ ls touch_log_file.py* $ ./touch_log_file.py $ ls log010317 touch_log_file.py* 

At the moment of writing it is January 3rd , 2017. Thus the resulting filename is appropriately month,day,year — log010317

Источник

⏱️ Как создать каталоги или файлы с именами на текущую дату/время/месяц/год на Linux

Вы когда-нибудь хотели создать каталог или файл и назвать его текущей датой / временем / месяцем / годом из командной строки в Linux?

Это будет полезно, если вы хотите что-то сохранить, например, фотографии, в каталогах с указанием даты, когда они действительно были сделаны.

Читайте также:  Linux запуск приложения демоном

Показанные далее команды создадут каталоги или файлы с именами с текущей датой или временем на основе часов вашего компьютера.

Создание каталогов или файлов с именами текущей даты / времени / месяца / года на Linux

Чтобы создать каталог и назвать его текущей датой, просто запустите:

Эта команда создаст каталог и назовет его сегодняшней датой в формате dd: mm: yyyy.

Аналогично, чтобы создать файл с текущей датой, временем, месяцем, годом, просто замените «mkdir» командой «touch»:

Создание каталогов или файлов с произвольным именем с текущей датой

Как насчет пользовательского имени для каталога или файла с датой / временем / месяцем / годом?

Создание каталогов файлов в формате ISO

Если вы хотите использовать формат даты ISO (например, 2020-06-06), запустите:

Все вышеперечисленные три команды дают одинаковый результат.

Для создания файлов просто замените mkdir командой «touch».

Больше примеров

Если вы хотите только день текущей даты, используйте:

Эта команда создаст каталог только с текущим днем в имени. т.е. 06.

Точно так же вы можете создавать каталоги с именем текущего месяца только в имени:

Обратите внимение что S – заглавная

Чтобы назвать каталог с текущими минутами, используйте заглавную M:

Во всех приведенных выше примерах мы создали каталоги с номерами на их именах.

Что если вы хотите назвать каталоги с фактическим названием текущего дня / месяца, например, Saturday, October и т. д.?

Вот список поддерживаемых операторов, которые вы можете использовать для именования каталогов с указанием текущего дня, месяца, времени, года, дня недели, дня месяца, часового пояса и т. д.

 %a locale's abbreviated weekday name (e.g., Sun) %A locale's full weekday name (e.g., Sunday) %b locale's abbreviated month name (e.g., Jan) %B locale's full month name (e.g., January) %c locale's date and time (e.g., Thu Mar 3 23:05:25 2005) %C century; like %Y, except omit last two digits (e.g., 20) %d day of month (e.g., 01) %D date; same as %m/%d/%y %e day of month, space padded; same as %_d %F full date; same as %Y-%m-%d %g last two digits of year of ISO week number (see %G) %G year of ISO week number (see %V); normally useful only with %V %h same as %b %H hour (00..23) %I hour (01..12) %j day of year (001..366) %k hour, space padded ( 0..23); same as %_H %l hour, space padded ( 1..12); same as %_I %m month (01..12) %M minute (00..59) %n a newline %N nanoseconds (000000000..999999999) %p locale's equivalent of either AM or PM; blank if not known %P like %p, but lower case %q quarter of year (1..4) %r locale's 12-hour clock time (e.g., 11:11:04 PM) %R 24-hour hour and minute; same as %H:%M %s seconds since 1970-01-01 00:00:00 UTC %S second (00..60) %t a tab %T time; same as %H:%M:%S %u day of week (1..7); 1 is Monday %U week number of year, with Sunday as first day of week (00..53) %V ISO week number, with Monday as first day of week (01..53) %w day of week (0..6); 0 is Sunday %W week number of year, with Monday as first day of week (00..53) %x locale's date representation (e.g., 12/31/99) %X locale's time representation (e.g., 23:13:48) %y last two digits of year (00..99) %Y year %z +hhmm numeric time zone (e.g., -0400) %:z +hh:mm numeric time zone (e.g., -04:00) %::z +hh:mm:ss numeric time zone (e.g., -04:00:00) %. z numeric time zone with : to necessary precision (e.g., -04, +05:30) %Z alphabetic time zone abbreviation (e.g., EDT)

Источник

Читайте также:  Bluetooth jammer kali linux

unixforum.org

Подскажите, как в bash можно в имя создаваемого файла подставить текущую дату (год-месяц-день:часы:минуты:секунды)?

Re: Решено: Запихать дату в имя файла

Сообщение madskull » 25.01.2005 10:41

Re: Решено: Запихать дату в имя файла

Сообщение alexsf » 25.01.2005 10:55

Класс, практически получилось.

В итоге получил файл file-2005-01-25:

Все, что после первого двоеточия в имя файла не вошло. Попробовал : заменить на . — то же самое. Что я неправильно делаю.
alexsf добавил в 25.01.2005 10:55
Ошибочка. Не то, чтоб не вошло — всё, что после двоеточия получилось отдельным файлом

Re: Решено: Запихать дату в имя файла

Сообщение madskull » 25.01.2005 10:59

Лучше используй %H (00-23)
Если время меньше десяти часов, то печатаются пробел и час => получается имя с пробелом => в понятии touch — два файла.
кстати, у тебя должен был получиться еще один файл, вроде 9:10:11. Неужели он не навел на размышления?

Re: Решено: Запихать дату в имя файла

Сообщение alexsf » 25.01.2005 11:19

(madskull @ Вторник, 25 Января 2005, 10:59) писал(а): Лучше используй %H (00-23)
Если время меньше десяти часов, то печатаются пробел и час => получается имя с пробелом => в понятии touch — два файла.
кстати, у тебя должен был получиться еще один файл, вроде 9:10:11. Неужели он не навел на размышления?

Действительно, файл получился. И на размышления навел, но додуматься я не смог А с использованием %H действительно все красиво.

Появился еще вопрос: а как мне переименовать файл в такой формат? И запомнить имя получившегося файла в переменной?

Источник

Append date to filename in linux

I want add the date next to a filename («somefile.txt»). For example: somefile_25-11-2009.txt or somefile_25Nov2009.txt or anything to that effect Maybe a script will do or some command in the terminal window. I’m using Linux(Ubuntu). The script or command should update the filename to a new date everytime you want to save the file into a specific folder but still keeping the previous files. So there would be files like this in the folder eventually: filename_18Oct2009.txt , filename_9Nov2009.txt , filename_23Nov2009.txt

You may want yyyy-mm-dd instead of dd-mm-yyyy to get lexicographical sort of file names to also sort them chronologically.

7 Answers 7

Info/Summary

With bash scripting you can enclose commands in back ticks or parantheses. This works great for labling files, the following wil create a file name with the date appended to it.

Example Usage:

echo "Hello World" > "/tmp/hello-$(date +"%d-%m-%Y").txt" (creates text file '/tmp/hello-28-09-2022.txt' with text inside of it) 

Note, in Linux quotes are your friend, best practice to enclose the file name to prevent issues with spaces and such in variables.

This appends the date to the filename — in the example in the question the date needs to go between the file name and the extension.

It might not answer the full question, but it took me ages to find out to use backticks, so thank you. (As @MehdiLAMRANI says, I use them without the double quotes.)

Читайте также:  Unix b linux руководство системного администратора 5 издание pdf

1. Get the date as a string

This is pretty easy. Just use the date command with the + option. We can use backticks to capture the value in a variable.

You can change the date format by using different % options as detailed on the date man page.

2. Split a file into name and extension.

This is a bit trickier. If we think they’ll be only one . in the filename we can use cut with . as the delimiter.

$ NAME=`echo $FILE | cut -d. -f1 $ EXT=`echo $FILE | cut -d. -f2` 

However, this won’t work with multiple . in the file name. If we’re using bash — which you probably are — we can use some bash magic that allows us to match patterns when we do variable expansion:

Putting them together we get:

$ FILE=somefile.txt $ NAME=$ $ EXT=$ $ DATE=`date +%d-%m-%y` $ NEWFILE=$_$.$ $ echo $NEWFILE somefile_25-11-09.txt 

And if we’re less worried about readability we do all the work on one line (with a different date format):

$ FILE=somefile.txt $ FILE=$_`date +%d%b%y`.$ $ echo $FILE somefile_25Nov09.txt 

Can you give some more details on precisely what you want to do. So you have a file in a directory which you want to date stamp in this way. Is it just one file with the same name each time or could it be a number of files with a number of different name?

I’m still not clear on what you want to do. It says the script should update the filename «everytime you want to save the file into a specific folder». What is saving the file into the folder? Where is it coming from?

If you want to have the filename changed everytime somebody saves something to a certain directory, then you’ll need some filesystem monitor. Have a look at inotify (man inotify); you should be able to build something that way.

cp somefile somefile_`date +%d%b%Y` 

You can add date next to a filename invoking date command in subshell.

date command with required formatting options invoked the braces of $() or between the backticks ( `…` ) is executed in a subshell and the output is then placed in the original command.

The $(. ) is more preferred since in can be nested. So you can use command substitution inside another substitution.

Solutions for requests in questions

$ echo somefile_$(date +%d-%m-%Y).txt somefile_28-10-2021.txt $ echo somefile_$(date +%d%b%Y).txt somefile_28Oct2021.txt 

The date command comes with many formatting options that allow you to customize the date output according to the requirement.

  • %D – Display date in the format mm/dd/yy (e.g. : 10/28/21)
  • %Y – Year (e.g. : 2021)
  • %m – Month (e.g. : 10)
  • %B – Month name in the full string format (e.g. : October)
  • %b – Month name in the shortened string format (e.g. : Oct)
  • %d – Day of month (e.g. : 28)
  • %j – Day of year (e.g. : 301)
  • %u – Day of the week (e.g. : 4)
  • %A – Weekday in full string format (e.g. : Thursday)
  • %a – Weekday in shortened format (e.g. : Thu)

Источник

Оцените статью
Adblock
detector