我在 bash 中有一个别名,我正在尝试将其移植到 zsh。我认为这可能是别名本身,但现在看来只是通配符。
grep -irl --exclude=\*.{log,class,fuegoclass,dat}* --exclude-dir={build,system,lib} data
在 zsh 中排除这些文件扩展名和目录的正确方法是什么?
答案1
在:
grep -irl --exclude=\*.{log,class,fuegoclass,dat}* --exclude-dir={build,system,lib} data
在zsh
and中bash
,--exclude=\*.{log,class,fuegoclass,dat}*
首先扩展到--exclude=\*.log* --exclude=\*.class* --exclude=\*.fuegoclass* --exclude=\*.dat*
,然后,由于未加引号*
,每个都被视为执行通配符的模式。
例如,--exclude=\*.log*
将扩展到当前目录中名称以--exclude=*.log
.
如果任何 glob 在 中不匹配,则zsh
命令将被中止。在 中bash
,球体将扩展到自身。
在这里,您不需要通配符,因此您应该引用所有通配符字符(在 和 中zsh
,bash
只是zsh
善意地指出您的错误)。
grep -irl --exclude=\*.{log,class,fuegoclass,dat}\* --exclude-dir={build,system,lib} data