Я не могу найти, как распечатать дату файла. Я до сих пор могу распечатать все файлы в каталоге, но мне нужно распечатать даты с ним.
Я знаю, что мне нужно прикрепить формат даты с эхом записи, но все, что я не могу найти правильный формат.
echo "Please type in the directory you want all the files to be listed"
read directory
for entry in "$directory"/*
do
echo "$entry"
done
Ответы:
Вы можете использовать
stat
командуБольше информации
источник
for entry in "$directory"/* do stat -c%y "$entry" done
Не работает Распечатывает статистику: пропавший операнд в терминалеstat
?stat -f "%m%t%Sm %N" filename
(см.man stat
Примеры для более подробной информации)stat
команда имеет другой синтаксис. Мой случай для FreeBSD:stat -f %Sm -t %F" "%R filename
.Разве команда date не намного проще? Нет необходимости в awk, stat и т. Д.
Кроме того, рассмотрите возможность просмотра форматирования даты на справочной странице ; например с общим форматом даты и времени:
источник
date
не имеет этого. Его-r
просто используют для предоставления метки времени для форматирования. Вы должны будете использовать дату GNU, чтобы получить эту функциональность.stat -f "%Sm" -t "%m%d%H%M%y" "${1}"
date [-r seconds | filename]
полностью документирована наman
странице и работает как положено.В OS X мне нравится, когда моя дата указывается в формате
YYYY-MM-DD HH:MM
вывода файла.Таким образом, чтобы указать файл, я бы использовал:
Если я хочу запустить его на нескольких файлах, я могу сделать что-то вроде этого:
В этом примере будет напечатан последний раз, когда я запускал
sudo periodic daily weekly monthly
команду, так как она ссылается на файлы журнала.Чтобы добавить имена файлов под каждой датой, я бы запустил следующее:
Выход был бы следующим:
К сожалению, я не уверен, как предотвратить разрыв строки и сохранить имя файла в конце даты без добавления дополнительных строк в сценарий.
PS - я использую,
#!/usr/bin/env bash
поскольку я являюсь пользователем Python днем, иbash
в моей системе установлены разные версии вместо#!/bin/bash
источник
echo -e "$(stat -f %Sm -t %Y%m%d_%H%M%S $AFile)\t$AFile."
. В вашем случае это может быть:echo -e "$(stat -f "%Sm" -t "%Y-%m-%d %H:%M" "$i")\t$i."
`Лучше всего
источник
Добавляя к ответу @StevePenny, вы, возможно, захотите вырезать не очень понятную для человека часть:
источник
Я хотел получить дату изменения файла в
YYYYMMDDHHMMSS
формате. Вот как я это сделал:Объяснение. Это комбинация этих команд:
источник
РЕДАКТИРОВАНИЕ: получается, что я забыл кавычки, необходимые для
$entry
правильной печати и не выдает ошибку «нет такого файла или каталога». Спасибо вам всем за помощь!Вот мой окончательный код:
Распечатывает как это:
источник
Для разрывов строк я отредактировал ваш код, чтобы получить что-то без разрывов строк.
источник
Если имя файла не имеет пробелов:
Это печатается в следующем формате:
Если имена файлов имеют пробел (вы можете использовать следующую команду для имен файлов без пробелов, просто это выглядит сложнее / уродливее, чем прежние):
источник
<dir>
которого не существует .... код прекрасно.Ты можешь использовать:
Это будет отображать дату в 2 цифры.
Если от 1 до 9 он добавляет префикс «0», он преобразуется в 01–09.
Надеюсь, что это соответствует ожиданиям.
источник