在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的全局,扩展或其他方面的能力。但我认为这是一个值得讨论的好问题。
答案 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
将匹配扩展程序中的一个或多个非.
个字符。