所以我有一个具有这种结构的文件夹。
topperlayer
├── layerone
│ └── testfile
└── layertwo
与layerone
和一样layertwo
,层下可以有很多目录,甚至是子目录。
图层之一或图层的子目录有一个文件testfile
。
是否可以testfile
使用 REGEX 获取 所在位置?
就像是 -
#!/bin/bash
echo $(ls topperlayer/<REGEX>/testfile)
我可以os.walk
对每个目录和子目录执行 an 操作以在 python 中查找该文件。但想在 shell 中执行此操作正则表达式。
任何帮助或指示将不胜感激。
PS - 我对正则表达式一无所知。
答案1
testfile
如果您需要在配置文件中指定文件的路径(正如您在注释中提到的),您必须首先知道它的位置。
有两种解决方案:
find topperlayer -type f -name testfile
topperlayer
这将搜索名为 的常规文件之前的目录和所有子目录testfile
。然后打印每个找到的文件的路径名。shopt -s globstar printf '%s\n' topperlayer/**/testfile
这将首先启用
globstar
中的 shell 选项bash
。这允许您使用**
工作方式类似于*
但“递归”匹配的通配模式。然后将printf
打印与给定的通配模式匹配的每个名称。
上面的两种选择都会打印路径名每一个 testfile
在下面topperlayer
。
找到文件的适当路径名后,将其添加到配置文件中。
答案2
find
你是朋友吗?
find topperlayer -path 'glob/testfile'
用模式(不是正则表达式)替换 glob 例如start*middle*end
如果您需要正则表达式,请使用选项-regex
find topperlayer -regex 'regex/testfile'