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.

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.» `

Читайте также:  Linux где хранятся удаленные файлы

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 

Источник

Как работать с датой и временем в Bash с помощью команды date

Команда Date — это внешняя программа bash, которая позволяет устанавливать или отображать системную дату и время. Он также предоставляет несколько вариантов форматирования. Команда Date установлена во всех дистрибутивах Linux по умолчанию.

Введите команду даты в терминал, которая отобразит текущую дату и время.

Изменить системную дату и время Linux

С помощью команды date можно изменить системную дату, время и часовой пояс, и это изменение должно быть синхронизировано с аппаратными часами.

$ date --set="Thu Nov 12 13:06:59 IST 2020" $ hwclock --systohc

Параметры форматирования

Хорошим местом для получения списка параметров форматирования будет справочная страница.

Читайте также:  My home lib linux

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

  • Чтобы применить форматирование, используйте «+, а затем «formatter».
  • Чтобы получить список параметров форматирования для GNU\LINUX, взгляните на связанную справочную страницу.
  • Чтобы получить список параметров форматирования для BSD, взгляните на связанную справочную страницу.

Две важные части команды date — это использование формата +% и параметр –date.

Теперь давайте применим форматирование к команде даты. Чтобы применить форматирование, добавьте знак плюса (+) , а затем %formatter , как показано в примерах.

Дата обработки в Linux

Давайте посмотрим, как использовать средства форматирования, связанные с датой, в простом сценарии оболочки под названием «date.sh».

# PRINT YEAR,MONTH,DAY AND DATE. echo "We are in the year = $(date +%Y)" echo "We are in the year = $(date +%y)" # Difference between %Y and %y is %Y will print 4 digits while %y will print the last 2 digits of the year. echo "We are in the month = $(date +%m)" echo "We are in the month = $(date +%b)" echo "We are in the month = $(date +%B)" # Difference between %B and %b is, %B will print full month name while %b will print abbreviated month name. echo "Current Day of the month = $(date +%d)" echo "Current Day of the week = $(date +%A)" echo "Current Day of the week = $(date +%a)" # Difference between %A and %a is, %A will print full Weekday name while %a will print abbreviated weekday name. # Instead of formatting to get the date, we can use %D which will print the date as %m/%d/%y or %F which prints in %Y-%M-%d format. echo "Date using %D = $(date +%D)" echo "Date using %F = $(date +%F)"

Время обработки в Linux

Давайте посмотрим, как использовать средства форматирования, связанные с временем, в простом сценарии оболочки под названием «time.sh».

# PRINT HOURS, MINS, SECONDS, NANO SECONDS echo Hours = $(date +%H) echo Minutes = $(date +%M) echo Seconds = $(date +%S) echo Nanoseconds = $(date +%N) echo Epoch Time = $(date +%s) echo "current time = $(date +%H:%M:%S:%N)" # can also use %T which displays Time in HH:MM:SS format. echo "current time in 24 hour format = $(date +%T)" # can also use %r to display time in 12 hour format. echo "current time in 12 hour format = $(date +%r)"

С флагом —date или -d

С помощью флага —date или -d ввод может быть передан как строка, и команда date знает, как с этим справиться.

Давайте посмотрим на несколько примеров, чтобы понять, как это работает.

# Print yesterday's date and time. echo "Yesterday = $(date -d "Yesterday")" # Print Tomorrow date and time. echo "tomorrow = $(date -d "tomorrow")" # Find what is the date and time before 10 days from now. echo "Before 10 days = $(date -d "tomorrow -10 days")" # Find last month and next month echo "Last month = $(date -d "last month" "%B")" echo "Next month = $(date -d "next month" "%B")" # Find last year and next year echo "Last Year = $(date -d "last year" "+%Y")" echo "Next Year = $(date -d "next year" "+%Y")" # Forecast the weekday echo "2 days away from today and it comes on weekdays? = $(date -d "Today +2 days" "+%A")

Общие операции

вычислить количество дней между двумя заданными датами.

$ echo $(( ( $(date -d "2020-11-10" "+%s") - $(date -d "2020-11-01" "+%s") ) / 86400))

Найдите данный год високосным или нет.

$ for y in ; do date -d $y-02-29 &>/dev/null && echo $y is leap year; done

Присвоение вывода команды даты переменной.

$ TODAY=$(date +%Y-%m-%d) OR $ TODAY1=$(date +%F) $ echo $TODAY $ echo $TODAY1

Создайте файлы журнала с датой, добавленной к имени файла.

Читайте также:  Как установить вулкан на линукс

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

Этот скрипт будет делать резервную копию с 00:00 до 23:59 и запускаться ежедневно в 00:00 следующего дня. Мы хотим создать файлы журналов со вчерашним форматом даты.

CUSTOM_FORMAT=$(date —date «Yesterday» «+%d-%y-%H:%M») LOG_FILE=/var/log/custom_application/application_$.log echo «Script started» >> $ . CODE BLOCKS . echo «Script completed» >> $

Это все для этой статьи. В этой статье мы увидели, как использовать дату и время bash в Linux. Дайте нам знать ваши отзывы.

Источник

Bash: Добавить текущую дату и метку времени к имени файла

При написании Bash сценариев иногда возникает необходимость включать в имена файлов информацию о текущей дате или метке времени, особенно когда файлы создаются регулярно, например, ежемесячно/ежедневно/ежечасно, для резервного копирования создания логов и других целей.

Инструмент date командной строки linux позволяет форматировать отображение текущего времени по своему усмотрению.

Синтаксис команды date выглядит следующим образом:

Включить текущее время с точностью до секунды:

now=$(date+"%Y-%m-%d-%S") filename="log_name.$now.log" # example: log_name.2022-02-16-39.log

Включить текущую метку времени с точностью до наносекунды:

now=$(date +"%Y.%m.%d.%S.%N") filename="log_name.$now.log" # example: log_name.2022.02.16.47.169617000.log

Включить текущую временную метку (т.е. количество секунд, прошедших с 1970-1-1):

now=$(date +"%s") filename="log_name.$now.log" # example : log_name.1644992228.log

Наиболее распространенные символы форматирования для команды data:

%Y — Год (например, 2022)
%m — Месяц (01-12)
%B — Длинное название месяца (например, November )
%b — Краткое название месяца (например, Nov )
%d — День месяца (например, 01)
%j — День года (001-366)
%u — День недели (1-7)
%A — Полное название дня недели (например, Friday )
%a — Краткое название дня недели (например, Fri )
%H — Час (00-23)
%I — Час (01-12)
%M — Минута (00-59)
%S — секунда (00-60)

Источник

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