【问题标题】:Find Regextype non recursive查找 Regextype 非递归
【发布时间】:2022-01-20 10:33:57
【问题描述】:

我正在尝试从 /home 目录中递归地隔离一些受 PHP 感染的文件,其中包括 8 个字母字符。

一旦进入目录,我就可以使用以下命令找到它们:

find ./ -regextype posix-egrep -regex ^./[a-zA-Z0-9]{8}\.php$

或者

find ./ -regextype posix-egrep -regex '^./[a-zA-Z0-9]{8}\.php$'

但是一旦我从另一个目录尝试:

 find /home -regextype posix-egrep -regex '^./[a-zA-Z0-9]{8}\.php$'

它没有任何结果。 我试图添加标志 -L (--follow) 但它没有任何结果并且有很多。文件系统循环错误。

我在网上阅读了许多似乎与 glob 相关的答案并找到了作品。 我尝试了不同的解决方案,例如:

find . -type f -print | egrep '^./[a-zA-Z0-9]{8}\.php$'

理想情况下,无论深度如何,输出都应该是完整路径,因此我可以快速将它们全部删除。

【问题讨论】:

  • 和'^.*/[a-zA-Z0-9]{8}\.php$'?
  • 这工作谢谢你:)

标签: regex bash shell find


【解决方案1】:

重点是find命令正则表达式需要匹配整个路径和文件名。所以,如果文件名之前有其他文件夹/目录名,你也需要消耗它们。

另外,[a-zA-Z0-9] 最好换成[[:alnum:]]:

find /home -regextype posix-egrep -regex '^.*/[[:alnum:]]{8}\.php$'

其实^在这里是多余的:

find /home -regextype posix-egrep -regex '.*/[[:alnum:]]{8}\.php$'

也可以。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    • 2016-07-13
    • 2012-07-17
    • 2015-12-16
    • 2011-05-04
    • 1970-01-01
    相关资源
    最近更新 更多