首页 > 解决方案 > 如何从 unix 的目录中提取文件(以数字命名)

问题描述

我有一个文件夹,其中包含编号为 1、2、3、4、5 等的文件。这些文件仅以数字命名。除了这些文件,我还在同一个目录中有两个文件夹。

我试图从文件名是数字的目录中提取最后五个文件(不包括文件夹和没有数字的文件)。所以我试图做这样的事情:

ls /var/lib/myFolder/prog/TEST_DEV/builds/ -t | head -n5

但这会返回文件以及我的两个目录。

然后我尝试了类似的东西:

ls /var/lib/myFolder/prog/TEST_DEV/builds/ -p | tail -5

这也不起作用。

关于如何进行的任何建议?

标签: unix

解决方案


您可以使用shell 通配符或解释正则表达式的脚本,例如 grep。

例如,为了列出文件名仅包含数字(一位或多位)的所有文件,您可以这样做:

ls -1 | egrep '\b[0-9]+\b'

如您所说,为了检索最后 5 个文件,您需要:

  1. 确保您使用 ls 的排序规则,例如ls -t按上次修改日期排序
  2. 要从列表中排除目录,您应该使用正则表达式排除末尾包含“/”的文件名,\b[0-9]+\b这意味着匹配项从头到尾有 1 个或多个数字。'/' 在目录名称的末尾可用,因为 ls 也有p选项。
  3. 使用tail -5命令限制返回的匹配

所以,我想这样的事情对你有用:

ls -1tp | egrep '\b[0-9]+\b' | tail -5

参考这个 SO 问题:Regular Expression usage with ls

参考Grep 备忘单


推荐阅读