如何打印最旧的文件并通过UNIX从目录中包含其时间戳

时间:2017-04-03 11:06:46

标签: bash shell unix

我在目录中有很多文件,我想打印最旧的文件及其时间戳。

以下命令为我提供了正确的文件名,但它没有显示时间戳。

ls -ltr | head -1

编辑:非基于gnu的系统。

3 个答案:

答案 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。)