2017-07-12 92 views
0

选择文件,我有其中有许多成千上万的文件有相似名称的文件夹: feed_1.txt, feed_2.txt, feed_3.txt基于名称

如何选择仅是feed_40000.txt和更高版本的文件?

+1

您可能会考虑'awk' – dawg

+0

您应该针对特定问题提出具体问题。由于Stack Overflow隐藏了你的密切原因:*“有些问题要求我们推荐或查找书籍,工具,软件库,教程或其他非本地资源,因为它们倾向于吸引自以为是的答案和垃圾邮件,因此不适合Stack Overflow。 “* – jww

+0

jww im对不起,我不明白你的反对意见,你可以请解释 – appleLover

回答

0

对于正则表达式的解决方案:

/feed_([4-9][0-9]{4}|[1-9][0-9]{5,})\.txt/g 

这将匹配适合以下两种格式的字符串:

feed_ab.txt,其中a是从4-9和b。数位是四位数字(为的情况下40000 < =数字< = 99999或

feed_cd.txt,其中c是来自1-9的数字d d是五位或更多位数(对于100000 < =数字的情况)。

1

您可以使用此awk根据检查获得与价值观>= 40000文件名:要循环这些文件名使用

printf "%s\n" feed_[0-9]* | awk -F '[_.]+' '$2 >= 40000' 

while read -r file; do 
    printf "processing %s\n" "$file" 
done < <(printf "%s\n" feed_[0-9]* | awk -F '[_.]+' '$2 >= 40000') 
1

你可以做

find . -type f -name "feed_*" | awk -F"_" '$2+0>=40000' # => list of file names... 
3

你可以使用查找正则表达式开关:

find . -type f -regextype posix-awk -regex ".*/feed_([4-9]|[123][0-9])[0-9]{4,}\.txt" 
+1

真棒回答先生,从来不知道这个选项也存在于发现,非常不错感谢分享它。 – RavinderSingh13

+0

'-regextype'是GNU只能作为注释找到的。 – dawg

+1

@dawg:默认情况下,regextype是emacs,你可以像这样写正则表达式,而不用这个开关,这里只用来缩短模式:'。*/feed _ \([4-9] \ | [123] [0-9] \)[0-9] [0-9] [0-9] [0-9] + \。txt' –

0

好的,这里是我的方法(作为一个学习和实验与exec和awk)。以下是命令。

find -type f -exec awk --re-interval 'FILENAME ~ /feed_[4-9][0-9]{4,}.txt/ && !a[FILENAME]++{;print FILENAME} END{if(FILENAME ~ /feed_[4-9][0-9]{4,}.txt/ && !a[FILENAME]++){print FILENAME}}' {} \; 

因此以下是相同点。

I-我使用的第一件事--re-interval支持{4,}找到连续出现的0-9数字,但在更新版本的awk中可以删除。

II-1多学习,我知道了

a- When using \; at last of command it will read the empty size files BUT 

b- When using \+ it will NOT display the 0 size files BECAUSE 

c- We all know \+ collects all the files first then it will perform mentioned action in single shot, so obviously END section will pick only the last file and other files which have ZERO size will NEVER be read. 

编辑:添加命令的非班轮一个形式现在也。

find -type f -exec awk --re-interval \ 
'FILENAME ~ /feed_[4-9][0-9]{4,}.txt/ && !a[FILENAME]++{;print FILENAME} \ 
END{if(FILENAME ~ /feed_[4-9][0-9]{4,}.txt/ && !a[FILENAME]++){print FILENAME}}' {} \;