在Bash中打印文件的最后修改日期

Hok*_*rie 124 unix bash shell date file

我似乎无法找到如何打印出文件的日期.我到目前为止能够打印出目录中的所有文件,但我需要用它打印出日期.

我知道我需要在条目的回显处添加日期格式,但是我找不到正确的格式.

echo "Please type in the directory you want all the files to be listed"

read directory 

for entry in "$directory"/*
do
  echo "$entry"
done
Run Code Online (Sandbox Code Playgroud)

小智 204

'date'命令不是更简单吗?不需要awk,stat等.

date -r <filename>
Run Code Online (Sandbox Code Playgroud)

另外,请考虑查看手册页以获取日期格式; 例如,具有共同的日期和时间格式:

date -r <filename> "+%m-%d-%Y %H:%M:%S"
Run Code Online (Sandbox Code Playgroud)

  • 更简单,然后使用stat/more available. (11认同)
  • 它看起来像BSD(或至少OS X的)`date`没有这个.它的`-r`只是用来提供格式化的时间戳.您必须使用GNU日期来获得此功能. (10认同)
  • 在OSX上使用:date`stat -f"%Sm"-t"%m%d%H%M%y""$ {1}"` (4认同)
  • 在OS X 10.10上,-r <filename>与广告一样,尽管手册页没有描述任何<filename>参数. (3认同)
  • OS X 10.11上没有`date -r`,但GNU Core Utils的`gdate -r`可以工作. (2认同)
  • 在macOS 10.13中,“日期[-r秒| 文件名]`完全记录在`man`页面中,并且可以正常工作。 (2认同)

小智 131

您可以使用该 stat 命令

stat -c %y "$entry"
Run Code Online (Sandbox Code Playgroud)

更多信息

%y   time of last modification, human-readable

  • 请注意,在OS X(Mac)上,它是`stat -f"%m%t%Sm%N"filename`(有关详细信息,请参阅`man stat`**examples**) (30认同)
  • 请注意,在BSD上,`stat`命令具有不同的语法.我的FreeBSD案例:`stat -f%Sm -t%F""%R filename`. (3认同)

Dan*_*s W 13

在OS X上,我喜欢我的日期格式YYYY-MM-DD HH:MM为文件的输出.

所以要指定一个我会使用的文件:

stat -f "%Sm" -t "%Y-%m-%d %H:%M" [filename]
Run Code Online (Sandbox Code Playgroud)

如果我想在一系列文件上运行它,我可以这样做:

#!/usr/bin/env bash
for i in /var/log/*.out; do
  stat -f "%Sm" -t "%Y-%m-%d %H:%M" "$i"
done
Run Code Online (Sandbox Code Playgroud)

此示例将在上次运行sudo periodic daily weekly monthly命令时打印出来,因为它引用了日志文件.


要在每个日期下添加文件名,我将运行以下代码:

#!/usr/bin/env bash
for i in /var/log/*.out; do
  stat -f "%Sm" -t "%Y-%m-%d %H:%M" "$i"
  echo "$i"
done
Run Code Online (Sandbox Code Playgroud)

输出如下:

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
Run Code Online (Sandbox Code Playgroud)

不幸的是,我不确定如何防止换行并将文件名附加到日期的末尾而不向脚本添加更多行.


PS - 我使用,#!/usr/bin/env bash因为我白天是Python用户,并且bash在我的系统上安装了不同版本而不是#!/bin/bash


ris*_*shi 9

最好的是 date -r filename +"%Y-%m-%d %H:%M:%S"

  • @UlysseBN 不,略有不同。他主张采用更好的日期格式。 (3认同)

fot*_*nus 6

添加到@StevePenny答案,您可能想要删除不那么人类可读的部分:

stat -c%y Localizable.strings | cut -d'.' -f1
Run Code Online (Sandbox Code Playgroud)