我有以下问题:我有一个这样的文件列表
File256name.txt
File307list.cvs
File2014text.xls
我将使用命令“find”只查找名称中数字低于1950的文件,因此与上一个列表一样,我将只列出这些文件
File256name.txt
File307list.cvs
我试过这个命令
find . -type f \( -iname '*[1-9][0-9][0-9]*' \)
但它也会显示包含名字>1950的数字的文件
作为附加说明,所有文件都可以有不同的文件名和扩展名,并且数字的位置是不可预测的…我正在寻找一个简单的命令来与find一起使用(对于我来说,必须使用find),方法是包含一个公式来只选择包含低于1950的数字的文件
还要考虑我的linux版本busybox v1.16.1的限制
谢谢你的帮助
最佳答案
您需要使用一个regex,它将根据世纪来区分十年:
.*(19[5-9][0-9]|[2-9][0-9]{3}).*
(这将找到大于或等于1950的4位数字)。
使用此regex,您可以使用
find
的“否定”选项来获取不带数字>=1950的文件。要删除没有任何编号的文件,请使用第二个条件。我没有用find测试过这个,但是你使用的regex允许1000编辑:
完整命令:
find . -regextype posix-egrep -regex '.*[0-9].*' \! -regex '.*(19[5-9][0-9]|[2-9][0-9]{3}).*'
有了busybox的find,需要更多的转义:
find . -regex '.*[0-9].*' \! -regex '.*\(19[5-9][0-9]\|[2-9][0-9]\{3\}\).*'