如何使用bash

时间:2015-11-17 09:34:37

标签: linux bash shell

我有一些文件(很像2000个文件),从b00123420151110121120.ext.123342开始b00+id+datetime(YmdHms).ext.id2。 我只需要列出某些日期的文件,例如... 20151106 ...我不关心其他任何事情,比如id或hourminutesecond,只有yearMonthDay。

我尝试使用awk和grep进行组合,但似乎无法正常工作

ls -1 dir/* | grep "20151106"

ls -1 dir/* | grep "*20151106*"

谢谢

2 个答案:

答案 0 :(得分:3)

如果您的ID是4位数,则可以使用

ls b00????20151106*

获取具有特定日期的文件

ls b00????201?1106*

从2016获取所有201的文件?年

ls b00????201[45]*

获取2014年和2015年的所有文件等

答案 1 :(得分:2)

这是一个适用于任何id长度的解决方案:

find dir -regex '.*b00.*20151110......\.ext.*'

它的工作原理是匹配:我们知道日期后跟.ext,我们不关心小时,分钟和秒。我们可以用6个点来匹配hhmmss。以下是模式的工作原理:

.*      # match anything before, e.g. the name of the directory
b00     # file prefix
.*      # id
2015    # year
11      # month
10      # day
..      # hour
..      # minutes
..      # seconds
\.ext.* # rest of the filename

您可以更改模式以匹配期间,例如当天使用..来获取当月的所有文件,使用..表示月份和日期以获得全年等等。