在 Linux 和 OS X 中获取名称末尾数字最大的文件夹

在 Linux 和 OS X 中获取名称末尾数字最大的文件夹

我昨天用 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 上测试

相关内容