在 bash 脚本中,我想查找其路径不包含具有“双扩展名”的子目录的文件。例如,如果我正在查找/my/home
for的子目录path/to/my/file
并且存在以下内容,则脚本将仅找到第一个:
/my/home/subdirectory.1/path/to/my/file
/my/home/subdirectory.1.2/path/to/my/file
这是一个简化的例子:1
and2
可以是任何字符串;关键是它们就像文件扩展名(即用句点分隔)。
我可以用ls
$ ls /my/home/subdirectory.*/path/to/my/file
但这两者都返回-我想替换.*
为,.[^.]*
但这是一个正则表达式,并且通配符不使用正则表达式。我已经尝试过扩展通配符,但我无法让它工作(我很高兴承认我不熟悉扩展通配符):
$ shopt -s extglob
$ ls /my/home/subdirectory.!(.*)/path/to/my/file
我知道我可以find
这样做:
$ find /my/home/subdirectory* -regex "/my/home/subdirectory.[^.]*/path/to/my/file"
但我希望 glob 更快。但是,在阅读了此内容后,我认为这超出了 Bash 的 globbing、扩展或其他方式的能力。但我认为这是一个值得讨论的好问题。