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

Bash 如何通过UNIX从目录打印最旧的文件并包括其时间戳,bash,shell,unix,Bash,Shell,Unix,我在一个目录中有许多文件,我想打印最旧的文件及其时间戳 ls -ltr | head -1 下面的命令为我提供了正确的文件名,但是它没有显示时间戳 ls -ltr | head -1 编辑:非gnu系统 ls -ltr | head -1 | awk '{OFS="\t"} {print $6, $7, $8, $9}' awk的打印语句采用索引 如果ls-ltr的输出为 -rw-r--r--1 abc 185 Dec 19 11:23 testfile.csv 然后 索引从左到右以1开

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

ls -ltr | head -1
下面的命令为我提供了正确的文件名,但是它没有显示时间戳

ls -ltr | head -1
编辑:非gnu系统

ls -ltr | head -1 |  awk '{OFS="\t"} {print $6, $7, $8, $9}'
awk的打印语句采用索引

如果
ls-ltr
的输出为

-rw-r--r--1 abc 185 Dec 19 11:23 testfile.csv

然后

索引从左到右以1开头


注意:awk的功能非常强大。

您可以使用
stat
以秒为单位打印修改时间戳,以历元和人类可读的形式显示。此后,您可以对第一个字段使用数字
排序
,最后使用
剪切
放弃第一个字段

stat -c $'%Y\t%y\t%n' * | sort -nk1 | cut -f 2-

编辑:要用于
gnu查找
,您可以使用:

find . -maxdepth 1 -printf '%T@\t%t\t%p\0' | sort -z -nk1 | cut -z -f2- | head -z -n1; echo

到目前为止,没有一个答案(除了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

stat
不包含在POSIX规范中,因此您需要查阅文档以确定系统的正确调用。(BSD
stat
此处显示。)

这会给我“Arg list too long”消息OK试试看:
find-print0 | xargs-0 stat-c$'%Y\t%Y\t%n'| sort-nk1 | cut-f2-
find:invalique选项--p find:[-H |-L]路径列表谓词列表xargs:invalique选项--0 xargs:用法:xargs:[-t][-t][-p][-e[eofstr e][-eofstr I repl]][-L#][-L[#][-n#[-x][-s size][cmd[args…]]正如我在回答中提到的,它需要
gnu find
。很抱歉,当我尝试find-print0命令时出现错误。请告诉我们您是在基于gnu的系统上还是在基于FreeBSD的系统上?不确定$6指的是什么。当我运行它时,它给出了以下信息:162474If
-rw-r--r--。6月21日14:39 1 user users 990 random_file
是你的
ls-ltr
的输出,然后$1=
-rw-r--r--.
$2=jung给我
ls-ltr
的输出,我会给你你什么索引need@GomuGomuZoro更新了答案,请检查。是的,我需要使用字母“el”而不是“one”。还必须做一个小的修改,它的工作。head-N2不是head-1,因为head-1返回一个空行。这对我很有用:ls-ltr | head-n2 | awk'{OFS=“\t”}{print$6、$7、$8、$9}'