在bash脚本中,我希望找到其路径不包含具有“双扩展名”的子目录的文件。例如,如果我期待在/my/home
为path/to/my/file
子目录和下面存在,脚本将查找只有第一个:是否可以使用Bash扩展匹配模式来匹配不包含特定字符的路径
/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
但这同时返回 - 我想,以取代.*
与.[^.]*
,但这是一个正则表达式和通配不使用正则表达式。我试过扩展的文件名替换,但我不能让它工作(我很高兴承认我不熟悉扩展通配符):
$ 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,extended或其他的能力。但我认为这是一个值得讨论的好问题。
请注意,可以使用克拉('^')代替感叹号。 – 2014-03-10 20:14:55