我似乎无法找到如何打印出文件的日期。我至今能打印出目录中的所有文件,但我需要用它打印出日期。在Bash中打印文件的最后修改日期
我知道我需要附加条目的回声日期格式,但我找不到正确的格式。
echo "Please type in the directory you want all the files to be listed"
read directory
for entry in "$directory"/*
do
echo "$entry"
done
我似乎无法找到如何打印出文件的日期。我至今能打印出目录中的所有文件,但我需要用它打印出日期。在Bash中打印文件的最后修改日期
我知道我需要附加条目的回声日期格式,但我找不到正确的格式。
echo "Please type in the directory you want all the files to be listed"
read directory
for entry in "$directory"/*
do
echo "$entry"
done
添加到@StevePenny答案,你可能要削减的不那么人类可读部分:
stat -c%y Localizable.strings | cut -d'.' -f1
如果文件名没有空格:
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")}'
编辑:原来,我已经忘记了需要报价为了正确打印并且不给“没有这样的文件或目录”错误。非常感谢你帮助我!
这是我的最终代码:
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
是不是 '日期' 命令更加简单?无需AWK,统计等
date -r <filename>
更简单,然后使用stat/more可用。 – Ing 2014-04-25 13:49:05
它看起来像BSD(或者至少OS X的)'日期'没有这个。它的'-r'只是用来提供格式化的时间戳。你将不得不使用GNU日期来获得这个功能。 – 2014-07-01 00:42:57
在OSX上使用:date'stat -f“%Sm”-t“%m%d%H%M%y”“$ {1}”' – Michaelangel007 2016-02-22 01:19:56
在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用户,并安装在我的系统,而不是#!/bin/bash
对于换行符我编辑你的代码在不同版本的bash
得到没有换行符的东西。
#!/bin/bash
for i in /Users/anthonykiggundu/Sites/rku-it/*; do
t=$(stat -f "%Sm" -t "%Y-%m-%d %H:%M" "$i")
echo $t : "${i##*/}" # t only contains date last modified, then only filename 'grokked'- else $i alone is abs. path
done
我想以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)
阅读-p目录 – CousinCocaine 2014-07-10 11:08:28