可以使用Bash扩展的globbing模式来匹配不包含特定字符的路径

时间:2013-03-18 20:38:34

标签: regex bash glob

在bash脚本中,我想查找路径不包含“double extension”的子目录的文件。例如,如果我查找/my/home的{​​{1}}子目录并且存在以下内容,则脚本将仅找到第一个:

path/to/my/file

这是一个简化示例:/my/home/subdirectory.1/path/to/my/file /my/home/subdirectory.1.2/path/to/my/file 1可以是任何字符串;关键点是它们就像文件扩展名(即以句点分隔)。

我可以使用2

ls

但这会返回两者 - 我想用$ ls /my/home/subdirectory.*/path/to/my/file 替换.*,但这是一个正则表达式,并且globbing不使用正则表达式。我已经尝试过扩展的globbing,但我无法让它工作(我很高兴承认我不熟悉扩展的globbing ):

.[^.]*

我知道我可以使用$ shopt -s extglob $ ls /my/home/subdirectory.!(.*)/path/to/my/file 这样做:

find

但我希望全球会更快。但是,在阅读完这篇文章之后,我认为这超出了Bash的全局,扩展或其他方面的能力。但我认为这是一个值得讨论的好问题。

2 个答案:

答案 0 :(得分:2)

尝试:

ls /my/home/subdirectory!(.*.*)/path/to/my/file

ls /my/home/subdirectory.!(*.*)/path/to/my/file

取决于您是否希望没有扩展名的目录匹配。

答案 1 :(得分:1)

我认为你想要的是

ls /my/home/direcectory.+([!.])/path/to/my/file

将匹配扩展程序中的一个或多个非.个字符。