Узнать время изменения файла linux

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.

Читайте также:  Каналы ввода вывода linux

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 

Источник

Читайте также:  Linux cheats for games

Команда Date (Дата) в Linux с примерами использования

Команда Date в Linux используется для отображения или установки системной даты и времени. Эта команда позволяет пользователям отображать время в различных форматах и посмотреть прошлые и будущие даты.

В этой инструкции мы расскажем про команду date в Linux и покажем примеры использования.

Как использовать команду Date (дата) Linux?

Ниже приведен синтаксис команды date в терминале Linux:

По умолчанию команда date выводит дату и часовой пояс, в котором настроена система. Чтобы изменить дату и время, вам потребуется пользователь с правами root или sudo.

Отображения команды Date

Когда команда дата используется без каких-либо параметров и аргументов, то она отображает текущую дату и время в формате по умолчанию. Выглядит это следующим образом:

Команда Date в Linux без параметров (атрибутов)

Выходные данные показывают день недели, день месяца, текущий месяц, год, текущее время и часовой пояс с указанием года. Так же команда « Date » отображает часовой пояс по умолчанию, установленный в вашей операционной системе.

Показать будущие даты

Параметр в строке date -d или —date покажет будущие или предстоящие даты. Чтобы вывести в терминале будущую дату, введите значение например «next Friday» (следующая пятница) или “tomorrow” (завтра).

Чтобы отобразить в терминале завтрашнюю дату, введите следующую команду:

Показ завтрашней даты в терминале

Отображение даты следующей пятницы:

Отображение даты следующей пятницы

Показ прошлых дат в Linux

Используя опцию -d, вы можете посмотреть прошлые даты в системе Linux. Команда даты позволяет вводить такие значения, как “yesterday” (вчера), «Saturday» (Суббота), «3 year ago» (3 года назад) и аналогичные. Таким образом, используя следующую параметр -date, вы можете отобразить прошлые даты:

Показ прошлой даты в Linux 1 год назад

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

Показ вчерашней даты

Аналогично, чтобы отобразить дату последней пятницы, выполните указанную ниже команду:

Показ даты последней пятницы

Параметры формата команды Date

Вывод терминала команды Linux date может быть изменен с использованием управляющих символов формата, которым предшествует символ «+«. Все эти элементы управления форматом начинаются со знака » % «.

Например, мы хотим отформатировать вывод команды 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)
Читайте также:  Kaspersky endpoint security linux debian

Используя следующую команду, вы можете изучить полный список параметров формата команды date:

Отображение даты из строкового значения

Параметры -date или -d позволяют отображать конкретную дату. Чтобы отобразить определенную дату, укажите строку даты в удобочитаемом формате, как показано в следующей команде:

Отображение даты из строкового значения

Используя опцию -d, вы также можете отобразить дату в пользовательском форматировании следующим образом:

отобразить дату в пользовательском форматировании

Показать время последнего изменения файла

Иногда нам нужно просмотреть время последнего изменения файла. Команда «Date» в системе Linux помогает вам отобразить время последнего изменения файла. При использовании команды «Date«, за которой следует опция «— r«, выводится время изменения файла.

Например, чтобы отобразить дату последнего изменения файла «/etc/hosts«, используйте следующую команду:

Показать время последнего изменения файла

Команда date для установки часового пояса

Команда «date» отображает часовой пояс вашей системы по умолчанию, определенный в файле «/etc/localtime«. Однако для отображения часового пояса другой страны установите переменную среды » TZ » в нужный часовой пояс.

Чтобы просмотреть все доступные списки часовых поясов, выполните следующую команду:

Просмотреть все доступные списки часовых поясов в Linux

Например, чтобы установить часовой пояс для отображения времени от Сиднея до Австралии, выполните следующую команду:

Изменение часового пояса в Linux

date в качестве преобразователя эпох

Команда «date» также работает как конвертер эпох. Эпоха отображает время в количестве секунд, прошедших со 2 февраля 1975 года в 00:00:00 UTC. Чтобы отобразить время, прошедшее в секундах до текущей даты, используйте команду date вместе с элементом управления форматом %s:

Команда date в качестве преобразователя эпох

Например, чтобы просмотреть, сколько секунд прошло с эпохи до определенной даты, используйте следующую команду:

Команда date в качестве преобразователя эпох

Использование date с другими командами

Команда «date» в системе Linux может быть реализована вместе с другими командами для создания различных имен файлов, содержащих информацию о текущей дате и времени.

В следующем примере мы создали новый файл резервной копии SQL с помощью приведенной ниже команды:

$ mysqldump database_name > database_name-$(date +%Y%m%d).sql

Команда date также может быть использована в сценарии командной оболочки. В следующем примере мы назначили вывод команды date новой переменной » date_now’.

Использование date с другими командами

Установка даты в Linux

Используя команду date, вы можете вручную установить дату системы Linux.

Например, чтобы вручную установить дату и время в системе Linux на 2:30 вечера 13 октября 2021 года. Выполните приведенную ниже команду:

Установка даты в Linux

В большинстве дистрибутивов Linux системное время по умолчанию синхронизируется с NTP или timedatectl / timesyncd. Так что не нужно сильно беспокоиться о его изменении.

Заключение

Мы рассказали о том, как использовать команду date в системе Linux. Чтобы узнать больше о команде date, можете посмотреть справочные страницы команды date.

Источник

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