如何从特定目录中的文件列表中打开最新文件?相同的文件名按日期排列,最新的在最后。
目前我正在使用以下命令:
ls -lrt filename*
tail -f filename
答案1
如果您的 shell 是类似 Bourne 的 shell,并且其[
内置函数实现了-nt
测试来测试一个文件是否比另一个文件新,您可以使用
newest=
for file in ./* ./.*; do
if [ -f "$file" ]; then
if [ -z "$newest" ] || [ "$file" -nt "$newest" ]; then
newest=$file
fi
fi
done
if [ -f "$newest" ]; then
printf 'The latest file is "%s"\n' "$newest"
else
echo 'Could not find files here' >&2
exit 1
fi
这将迭代当前目录中的所有常规文件(以及到常规文件的符号链接)(包括隐藏文件),然后告诉您哪个文件是最新的文件。您可以将该printf
语句替换为您想要运行的实际命令"$newest"
。
作为 shell 函数,它还接受文件列表作为其参数:
newest () (
newest=
for file do
if [ -f "$file" ]; then
if [ -z "$newest" ] || [ "$file" -nt "$newest" ]; then
newest=$file
fi
fi
done
if [ -f "$newest" ]; then
printf '%s\n' "$newest"
else
echo 'No files found' >&2
return 1
fi
)
然后
tail -f "$(newest ./filename*)"
答案2
如果zsh
已安装,您可以在其中执行以下操作:
tail -f 文件名Ctrl+xm
Ctrl+xm是一个扩展到最新文件的完成器(根据最后一个修改时间)。
在脚本中:
#! /usr/bin/env zsh
tail -f filename*(om[1])
其中om
按修改时间排序(最近的在前)并[1]
选择第一个。
答案3
您可以使用 GNUfind
来打印所有文件的上次修改时间,sort
以相反的顺序,获取最新修改的文件(head -n 1
- 顶部条目),然后对上次修改的文件进行尾部处理
find <Directory-name> -type f -printf '%TY-%Tm-%Td %TT %p\n' | sort -r | head -n 1 | awk '{print $3}' | xargs tail -f