如何基于正则表达式递归查找当前文件夹和子文件夹中的所有文件

时间:2019-07-11 11:20:10

标签: regex linux bash find

我需要在目录和子目录中找到所有名称与不同正则表达式匹配的文件,并打印有关它们的信息。

例如,我有3个目录:

/foo1
/foo1/foo2
/foo1/foo2/foo3

此目录fgg1_1 fgg2_1 fgg3_1中的文件:

/foo1/fgg1_1
/foo1/foo2/fgg2_1
/foo1/foo2/foo3/fgg3_1

我需要找到所有与RE 'f.+1$'匹配的文件。可能有人想使用

find /foo -regex 'f.+1$' -printf '%f %A@ %s \n'

但肯定不会与任何内容匹配,因为-regex会评估完整的文件名,例如/foo1/foo2/fgg2_1

我尝试对输出进行grep,但并没有太大帮助,因为我仍然需要获取有关找到的文件的信息

find /foo -print '%f\n' | grep 'f.+1$'

值得注意的是,我正在寻找一种通用的解决方案,因为该命令是通过ssh在远程主机上执行并使用python脚本编译的,因此文件名的路径和RE可能每次都不同

解决方案

您需要删除文件名RE开头的所有^符号

find /foo -regex '.*\/f.+1$' -printf '%p %f %h %Y %G %U %A@ %C@ %T@ %s\n'

有些矫kill过正,但由于stat如何显示c_time,我最终使用了

find /foo | grep -e '.*\/f.+1$' | xargs stat --printf '%n %F %g %u %X %Z %Y %s %A\n'

2 个答案:

答案 0 :(得分:3)

要匹配以匹配给定正则表达式的文件名结尾的整个路径,可以在其前面加上.*/,例如.*/f.+1$.*/应该与文件名前面的路径匹配。

答案 1 :(得分:0)

如果您不需要正则表达式,可以尝试:

  

找到/ foo -name“ fgg *” | xargs ls -l <​​/ p>