- Print a file’s last modified date in Bash
- 10 Answers 10
- Команда Date (Дата) в Linux с примерами использования
- Как использовать команду Date (дата) Linux?
- Отображения команды Date
- Показать будущие даты
- Показ прошлых дат в Linux
- Параметры формата команды Date
- Отображение даты из строкового значения
- Показать время последнего изменения файла
- Команда date для установки часового пояса
- date в качестве преобразователя эпох
- Использование date с другими командами
- Установка даты в Linux
- Заключение
Print a file’s last modified date in Bash
I can’t seem to find how to print out the date of a file. I’m so far able to print out all the files in a directory, but I need to print out the dates with it. I know I need to attach a date format with the echo of the entry, but all I can’t find the correct format.
echo "Please type in the directory you want all the files to be listed" read directory for entry in "$directory"/* do echo "$entry" done
10 Answers 10
Isn’t the ‘date’ command much simpler? No need for awk, stat, etc.
Also, consider looking at the man page for date formatting; for example with common date and time format:
It looks like BSD (or at least OS X’s) date ‘s doesn’t have this. Its -r is just used to provide a timestamp to format. You’ll have to use GNU date to get this functionality.
In macOS 10.13 date [-r seconds | filename] is fully documented in the man page, and works as expected.
%y time of last modification, human-readable
for entry in «$directory»/* do stat -c%y «$entry» done Doesn’t work. Prints out stat: missing operand in terminal
Note that on BSD the stat command has a different syntax. My case for FreeBSD: stat -f %Sm -t %F» «%R filename .
Alternatively, you may try also :
On OS X, I like my date to be in the format of YYYY-MM-DD HH:MM in the output for the file.
So to specify a file I would use:
stat -f "%Sm" -t "%Y-%m-%d %H:%M" [filename]
If I want to run it on a range of files, I can do something like this:
#!/usr/bin/env bash for i in /var/log/*.out; do stat -f "%Sm" -t "%Y-%m-%d %H:%M" "$i" done
This example will print out the last time I ran the sudo periodic daily weekly monthly command as it references the log files.
To add the filenames under each date, I would run the following instead:
#!/usr/bin/env bash for i in /var/log/*.out; do stat -f "%Sm" -t "%Y-%m-%d %H:%M" "$i" echo "$i" done
The output would was the following:
2016-40-01 16:40 /var/log/daily.out 2016-40-01 16:40 /var/log/monthly.out 2016-40-01 16:40 /var/log/weekly.out
Unfortunately I’m not sure how to prevent the line break and keep the file name appended to the end of the date without adding more lines to the script.
PS — I use #!/usr/bin/env bash as I’m a Python user by day, and have different versions of bash installed on my system instead of #!/bin/bash
In case you haven’t figured out the line break part, the -e flag is available for the echo program. Example usage could be: echo -e «$(stat -f %Sm -t %Y%m%d_%H%M%S $AFile)\t$AFile.» . In your case it could be: echo -e «$(stat -f «%Sm» -t «%Y-%m-%d %H:%M» «$i»)\t$i.» `
Adding to @StevePenny answer, you might want to cut the not-so-human-readable part:
stat -c%y Localizable.strings | cut -d'.' -f1
For the line breaks i edited your code to get something with no line breaks.
#!/bin/bash for i in /Users/anthonykiggundu/Sites/rku-it/*; do t=$(stat -f "%Sm" -t "%Y-%m-%d %H:%M" "$i") echo $t : "$" # t only contains date last modified, then only filename 'grokked'- else $i alone is abs. path done
If file name has no spaces:
This prints as the following format:
Dec 21 20:03 a1.out Dec 21 20:04 a.cpp
If file names have space (you can use the following command for file names with no spaces too, just it looks complicated/ugly than the former):
Ah, I see! That mostly works, except for the files with the spaces in the names. Is there a solution for that?
Actually, I tried it again, and it doesn’t work. turns out I was trying out a directory that had file names without spaces. =/ Edited my answer below
when you say it does not work, can you say what is the error? it works for me when i executed it on my system.
EDITED: turns out that I had forgotten the quotes needed for $entry in order to print correctly and not give the «no such file or directory» error. Thank you all so much for helping me!
echo "Please type in the directory you want all the files to be listed with last modified dates" #bash can't find file creation dates read directory for entry in "$directory"/* do modDate=$(stat -c %y "$entry") #%y = last modified. Qoutes are needed otherwise spaces in file name with give error of "no such file" modDate=$ #%% takes off everything off the string after the date to make it look pretty echo $entry:$modDate
/home/joanne/Dropbox/cheat sheet.docx:2012-03-14 /home/joanne/Dropbox/Comp:2013-05-05 /home/joanne/Dropbox/Comp 150 java.zip:2013-02-11 /home/joanne/Dropbox/Comp 151 Java 2.zip:2013-02-11 /home/joanne/Dropbox/Comp 162 Assembly Language.zip:2013-02-11 /home/joanne/Dropbox/Comp 262 Comp Architecture.zip:2012-12-12 /home/joanne/Dropbox/Comp 345 Image Processing.zip:2013-02-11 /home/joanne/Dropbox/Comp 362 Operating Systems:2013-05-05 /home/joanne/Dropbox/Comp 447 Societal Issues.zip:2013-02-11
Команда Date (Дата) в Linux с примерами использования
Команда Date в Linux используется для отображения или установки системной даты и времени. Эта команда позволяет пользователям отображать время в различных форматах и посмотреть прошлые и будущие даты.
В этой инструкции мы расскажем про команду date в Linux и покажем примеры использования.
Как использовать команду Date (дата) Linux?
Ниже приведен синтаксис команды date в терминале Linux:
По умолчанию команда date выводит дату и часовой пояс, в котором настроена система. Чтобы изменить дату и время, вам потребуется пользователь с правами root или sudo.
Отображения команды Date
Когда команда дата используется без каких-либо параметров и аргументов, то она отображает текущую дату и время в формате по умолчанию. Выглядит это следующим образом:
Выходные данные показывают день недели, день месяца, текущий месяц, год, текущее время и часовой пояс с указанием года. Так же команда « Date » отображает часовой пояс по умолчанию, установленный в вашей операционной системе.
Показать будущие даты
Параметр в строке date -d или —date покажет будущие или предстоящие даты. Чтобы вывести в терминале будущую дату, введите значение например «next Friday» (следующая пятница) или “tomorrow” (завтра).
Чтобы отобразить в терминале завтрашнюю дату, введите следующую команду:
Отображение даты следующей пятницы:
Показ прошлых дат в Linux
Используя опцию -d, вы можете посмотреть прошлые даты в системе Linux. Команда даты позволяет вводить такие значения, как “yesterday” (вчера), «Saturday» (Суббота), «3 year ago» (3 года назад) и аналогичные. Таким образом, используя следующую параметр -date, вы можете отобразить прошлые даты:
Чтобы показать вчерашнюю дату, используйте следующую команду:
Аналогично, чтобы отобразить дату последней пятницы, выполните указанную ниже команду:
Параметры формата команды Date
Вывод терминала команды Linux date может быть изменен с использованием управляющих символов формата, которым предшествует символ «+«. Все эти элементы управления форматом начинаются со знака » % «.
Например, мы хотим отформатировать вывод команды date следующим образом:
Используя этот список символов форматирования, вы можете отображать выходные данные в желаемом формате:
- %a — Печатает название дня недели в кратком формате (например, Пн)
- %A — Используется для отображения полного названия дня недели (например, понедельник)
- %b — Отображение названия месяца в краткой форме (например, январь)
- %B — Используется для отображения полного названия месяца (например, январь)
- %d — Отображает день месяца (например, 05)
- %H — Время отображения (00..23)
- %I — Время отображения в формате (01..12)
- %j — Отображает день года (001..366)
- %m — Отображает число месяцев (01..12)
- %M — Показ минут за 00..59 сек.
- %S — Отображает секунды (00..60)
- %u — Отображение числа дней недели (1..7)
- %Y — Используется для отображения полного года (например, 2019)
Используя следующую команду, вы можете изучить полный список параметров формата команды date:
Отображение даты из строкового значения
Параметры -date или -d позволяют отображать конкретную дату. Чтобы отобразить определенную дату, укажите строку даты в удобочитаемом формате, как показано в следующей команде:
Используя опцию -d, вы также можете отобразить дату в пользовательском форматировании следующим образом:
Показать время последнего изменения файла
Иногда нам нужно просмотреть время последнего изменения файла. Команда «Date» в системе Linux помогает вам отобразить время последнего изменения файла. При использовании команды «Date«, за которой следует опция «— r«, выводится время изменения файла.
Например, чтобы отобразить дату последнего изменения файла «/etc/hosts«, используйте следующую команду:
Команда date для установки часового пояса
Команда «date» отображает часовой пояс вашей системы по умолчанию, определенный в файле «/etc/localtime«. Однако для отображения часового пояса другой страны установите переменную среды » TZ » в нужный часовой пояс.
Чтобы просмотреть все доступные списки часовых поясов, выполните следующую команду:
Например, чтобы установить часовой пояс для отображения времени от Сиднея до Австралии, выполните следующую команду:
date в качестве преобразователя эпох
Команда «date» также работает как конвертер эпох. Эпоха отображает время в количестве секунд, прошедших со 2 февраля 1975 года в 00:00:00 UTC. Чтобы отобразить время, прошедшее в секундах до текущей даты, используйте команду date вместе с элементом управления форматом %s:
Например, чтобы просмотреть, сколько секунд прошло с эпохи до определенной даты, используйте следующую команду:
Использование date с другими командами
Команда «date» в системе Linux может быть реализована вместе с другими командами для создания различных имен файлов, содержащих информацию о текущей дате и времени.
В следующем примере мы создали новый файл резервной копии SQL с помощью приведенной ниже команды:
$ mysqldump database_name > database_name-$(date +%Y%m%d).sql
Команда date также может быть использована в сценарии командной оболочки. В следующем примере мы назначили вывод команды date новой переменной » date_now’.
Установка даты в Linux
Используя команду date, вы можете вручную установить дату системы Linux.
Например, чтобы вручную установить дату и время в системе Linux на 2:30 вечера 13 октября 2021 года. Выполните приведенную ниже команду:
В большинстве дистрибутивов Linux системное время по умолчанию синхронизируется с NTP или timedatectl / timesyncd. Так что не нужно сильно беспокоиться о его изменении.
Заключение
Мы рассказали о том, как использовать команду date в системе Linux. Чтобы узнать больше о команде date, можете посмотреть справочные страницы команды date.