Answers:
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 <filename>
另外,考虑查看手册页中的日期格式;例如具有常见的日期和时间格式:
date -r <filename> "+%m-%d-%Y %H:%M:%S"
date
没有此功能。它-r
仅用于提供格式化时间戳记。您必须使用GNU date来获得此功能。
stat -f "%Sm" -t "%m%d%H%M%y" "${1}"
date [-r seconds | filename]
完整记录了macOS 10.13 中的内容man
,并且可以正常工作。
在OS X上,我希望日期以YYYY-MM-DD HH:MM
文件输出中的格式显示。
因此,要指定一个文件,我将使用:
stat -f "%Sm" -t "%Y-%m-%d %H:%M" [filename]
如果要在一系列文件上运行它,可以执行以下操作:
#!/usr/bin/env bash
for i in /var/log/*.out; do
stat -f "%Sm" -t "%Y-%m-%d %H:%M" "$i"
done
该示例将打印出我上次运行该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
输出如下:
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
不幸的是,我不确定如何防止换行并在文件末尾附加文件名而不向脚本添加更多行。
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."
`
我想以YYYYMMDDHHMMSS
格式获取文件的修改日期。这是我的做法:
date -d @$( stat -c %Y myfile.css ) +%Y%m%d%H%M%S
说明。这些命令的组合:
stat -c %Y myfile.css # Get the modification date as a timestamp
date -d @1503989421 +%Y%m%d%H%M%S # Convert the date (from timestamp)
编辑:原来我已经忘记了$entry
正确打印所需的引号,并且没有给出“没有这样的文件或目录”错误。非常感谢大家对我的帮助!
这是我的最终代码:
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=${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
如果文件名没有空格:
ls -l <dir> | awk '{print $6, " ", $7, " ", $8, " ", $9 }'
打印为以下格式:
Dec 21 20:03 a1.out
Dec 21 20:04 a.cpp
如果文件名中有空格(您也可以将以下命令用于没有空格的文件名,只是看起来比前者复杂/难看):
ls -l <dir> | awk '{printf ("%s %s %s ", $6, $7, $8); for (i=9; i<=NF; i++){ printf ("%s ", $i)}; printf ("\n")}'
<dir>
不存在。