我知道如何使用cat
来快速打开一个文件,但是我的一个程序生成了一些具有超长/奇怪名称的日志文件,并且键入-ls
以查找名称确实效率不高。
如何打开刚刚在文件夹中创建的最后一个文本文件?
谢谢!
答案1
简单的例子。如果你知道你的文件名是合理的(没有空格、通配符、换行符等),你可以这样做:
cat $(ls -t | head -n1)
要处理空格和通配符,只需引用:
cat "$(ls -t | head -n1)"
如果你的文件名是任意的,并且你需要让它工作任何文件名(包括名称中带有换行符的文件名)使用:
cat "$(stat --printf '%n/%Y\0' * | sort -rz -t'/' -k 2 | head -z -n 1 | cut -d'/' -z -f 1 )"
解释
stat --printf '%n/%Y\0'
:打印文件名及其修改日期(自纪元以来的秒数/
),然后使用 NUL ( ) 分隔\0
。我/
使用\0
因为它们是仅有的文件/目录名称中不允许有两个字符。sort -rz -t'/' -k 2
:按第二个/
-分隔字段排序。这-z
使得sort
读取以 NUL 分隔的数据。head -z -n 1
:仅保留第一个以 NUL 分隔的(-z
)行。cut -d'/' -z -f 1
:仅打印第一个/
- 分隔字段,即文件名。同样,makes-z
处理cut
NUL 分隔的数据。
使用
zsh
而不是bash
作为你的 shell,然后运行:cat *(om[1])
您可以将其中任何一个(最好是 3,因为它是最强大的)设置为别名,方法是将这一行添加到您的~/.bashrc
:
alias cat_last='cat "$(stat --printf "%n/%Y\0" * | sort -rz -t"/" -k 2 | head -z -n 1 | cut -d"/" -z -f 1 )" 2>/dev/null'
我添加了,/dev/null
因为在我的系统上,shell 会抱怨输入中有一个 NUL 字节。但这不会阻止命令,也没有理由继续看到错误。