我昨天用 Linux 问了这个问题,但我意识到我需要让它在 Linux 和 OS X 上运行。链接到之前的问题:在 Linux 中获取名称末尾数字最大的文件夹。
我有一些文件夹 r1、r2、r3 等,我想获取末尾数字最大的文件夹的名称。我该如何获取该名称?
ls -v 解决方案看起来很有希望,但我想排除所有不遵循模式 r[0-9]* 的文件夹
答案1
由于您以这种方式限制文件名,因此您可以使用以下命令:
$ ls | grep '^r[0-9]\+$' | cut -c2- | sort -n | tail -n1 | sed 's|^|r|'
- 列出文件
- 仅使用名称完全匹配的那些
r[0-9]+
,即r
后面跟着任意数字序列 - 删除第一个字符,即
r
,只留下数字 - 根据数值排序
- 获取最后一个(最高)值
- 前面加上一个
r
例子:
$ ls
bar baz foo qux r14 r23 r36 r4 r41 r6 r9 rar raz roo
$ ls | grep '^r[0-9]\+$' | cut -c2- | sort -n | tail -n1 | sed 's|^|r|'
r41
答案2
您可以随时安装最新版本GNU coreutils
以便有--version-sort
选择。两个步骤(需要一到两分钟):
1)安装 Homebrew
一个简单的方法是安装自制,它是 OS X 的一个包管理器,可以帮助您轻松安装二进制文件:
ruby -e "$(curl -fsSL https://gist.github.com/raw/323731/install_homebrew.rb)"
要获取 的最新版本sort
,请安装 GNU Coreutils:
brew install coreutils
2)然后使用gsort
您现在将拥有一个sort
功能更强大的版本。它将在 下可用gsort
。现在只需运行您其他问题中的命令,但gsort
改为使用。
printf '%s\n' r[0-9]* | gsort --version-sort | tail -n 1
结果
我刚刚在 10.6 上测试了这一点,运行良好:
charon:Desktop user$ mkdir r1 r2 r3
charon:Desktop user$ printf '%s\n' r[0-9]* | gsort --version-sort | tail -n 1
r3
答案3
看起来下面的应该可以工作ls | grep r.*[0-9] | tail -n 1
。唯一的规定是,为了使此命令显示具有最长数字的文件名,1-9 目录必须带有 0 前缀。
例如,如果您有 r1、r2、r3、r1287364763874 并运行该命令,您将得到 r3 作为输出。但如果下级目录标记为 r01、r02、r03、r18646483,则命令结果将为 r18646483。
希望有所帮助。
在 Mac OS 10.5 上测试