unix - 如何从 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
这也不起作用。
关于如何进行的任何建议?
解决方案
您可以使用shell 通配符或解释正则表达式的脚本,例如 grep。
例如,为了列出文件名仅包含数字(一位或多位)的所有文件,您可以这样做:
ls -1 | egrep '\b[0-9]+\b'
如您所说,为了检索最后 5 个文件,您需要:
- 确保您使用 ls 的排序规则,例如
ls -t
按上次修改日期排序 - 要从列表中排除目录,您应该使用正则表达式排除末尾包含“/”的文件名,
\b[0-9]+\b
这意味着匹配项从头到尾有 1 个或多个数字。'/' 在目录名称的末尾可用,因为 ls 也有p
选项。 - 使用
tail -5
命令限制返回的匹配
所以,我想这样的事情对你有用:
ls -1tp | egrep '\b[0-9]+\b' | tail -5
参考这个 SO 问题:Regular Expression usage with ls
参考Grep 备忘单。
推荐阅读
- hive - 使用 athena alter table 语句创建分区
- typescript - 从其他包扩展接口
- azure - ARM 模板 Key Vault 访问策略以分组而不是身份原则
- vb.net - 自定义按钮控件中的圆角柱
- css - CSS 文本空白扩展为填充
- rest - 如何集成 Spring MVC 和 Nuxt JS?
- powershell - 使用 powershell 将数据复制到不同的驱动器
- node.js - 如何使用 webpack 节点 API 执行编译后的代码?
- c# - 使用外部 dll 函数时 C++ 访问冲突
- java - Spring Boot 应用无法启动 | 无法将“spring.data.mongodb.host”下的属性绑定到 java.lang.String