如何在目录中仅获取最新的文件名?

5
我正在使用。
ls -ltr /homedir/mydirectory/work/ |tail -n 1|cut -d ' ' -f 10

但这是一种非常粗糙的获取所需结果的方法,而且不可靠。只是简单执行会得到以下输出:
ls -ltr /homedir/mydirectory/work/ |tail -n 1

-rw-r--r-- 1 user pusers 1764 Apr  1 12:06 firstfile.xml

所以,这里我获取到了文件名。 但是,如果执行上述命令后的输出如下:
-rw-r--r-- 100 user pusers 1764 Apr  1 12:06 firstfile.xml

第一条命令失败了!这是可以理解的,因为我从第10个字符开始截取结果,现在已经不再有效。
那么如何进行改进呢?

“最新”是否意味着修改日期最近的文件? - user529758
1
是的,它的意思是那样。我只想要文件名。 - R11G
3个回答

10

如果不需要,为什么要在ls中使用-l标志呢?如果您不需要更多信息,那么让ls简单地输出文件名,而不是试图“解析”其不统一的输出(强制文本处理实用程序......)。

LAST_MODIFIED_FILE=`ls -tr | tail -n 1`

但我需要文件名。这是要求。 因此,必须使用“cut”。 - R11G
2
@R11G 不需要。你认为 ls 输出的不是文件名,是吗?你真的尝试过我提出的解决方案吗? - user529758
是的,我只尝试过那个方法。 我仍然感到困惑的是,如果第二列(指向该文件/目录的硬链接计数)有两三位数字,我之前使用“cut”命令仅获取文件名的命令将会失败。 如何克服这个问题? - R11G
如果你只需要文件名,那么我的代码就可以工作。 - user529758

1

扩展用户user529758的答案,可以根据文件名给出结果

根据文件名使用以下命令

ls -tr Filename* | tail -n 1

1
如果您真的想用自己的方法实现这个目标,那么请使用awk代替cut
ls -ltr /var/log/ |tail -n 1| awk '{print $9}'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接