我在目录中有很多文件,我想打印最旧的文件及其时间戳。
以下命令为我提供了正确的文件名,但它没有显示时间戳。
ls -ltr | head -1
编辑:非基于gnu的系统。
答案 0 :(得分:1)
您可以使用stat
打印自EPOCH和人类可读形式以来的修改时间戳(以秒为单位)。此后,您可以在第一个字段上使用数字sort
,最后在cut
上使用第一个字段。
stat -c $'%Y\t%y\t%n' * | sort -nk1 | cut -f 2-
编辑:要使用gnu find
,您可以使用:
find . -maxdepth 1 -printf '%T@\t%t\t%p\0' | sort -z -nk1 | cut -z -f2- | head -z -n1; echo
答案 1 :(得分:0)
ls -ltr | head -1 | awk '{OFS="\t"} {print $6, $7, $8, $9}'
awk的print语句采用索引
如果ls -ltr
的输出为
-rw-r--r-- 1 abc abc 185 Dec 19 11:23 testfile.csv
然后
$6: date (19)
$7: month (Dec)
$8: time (11:23)
$9: file name (testfile.csv)
索引从左到右从1开始。
注意:https://www.gnu.org/s/gawk/manual/gawk.html awk非常强大。
答案 2 :(得分:0)
到目前为止,没有任何答案(除了anubhava的编辑,我在上次查看之后忽略或添加)都适应包含换行符的文件名。但是,您实际上不需要查看每个文件的时间戳,以确定哪个文件是bash
中最早的文件。有一个条件运算符-ot
,用于确定一个文件是否比另一个文件旧。
oldest=
for f in *; do
[[ -z $oldest || $f -ot $oldest ]] && oldest=$f
done
ts=$(stat -f %m "$oldest") # Get the timestamp for the oldest file
POSIX规范不涵盖 stat
,因此您需要查阅文档以确定对系统的正确调用。 (此处显示的是BSD stat
。)