如何从UNIX目录中提取文件(以数字命名)

时间:2018-06-28 15:12:17

标签: 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

哪个也不行。

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

  1. 确保您使用ls -t之类的ls排序规则按上次修改日期进行排序
  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 cheat sheet