Zsh:递归源脚本

Tuy*_*ham 6 scripting zsh

我有~/scripts/包含多个具有任意目录级别的子文件夹的文件夹。

此文件夹仅用于启动时需要获取的脚本zsh,如何以简短有效的方式递归获取其文件夹及其子文件夹下的所有文件?

Sté*_*las 11

按整理顺序在那里采购所有非隐藏的常规文件:

for f (~/scripts/**/*(N.))  . $f
Run Code Online (Sandbox Code Playgroud)

但是,我建议您使用特定模板命名这些文件,例如带有.zsh扩展名(并使用*.zsh而不是*上面的),以避免出现问题,例如,如果那里有备份文件。

或者你至少可以排除一些常见的,比如file~, file.dpkg-dist, file.back...:

set -o extendedglob
for f (~/scripts/**/^*("~"|dpkg-(dist|old|new)|.(tmp|back|bak))(N.))  . $f
Run Code Online (Sandbox Code Playgroud)

等等。

  • @TuyenPham 不,将它们这样组合是没有意义的。这是关于使用白名单与黑名单。白名单是`/*.zsh`,黑名单是`/^*("~"|dpkg<...>)`。使用白名单更安全,但是如果您的命名要求不允许要求文件以“.zsh”结尾,那么您至少可以选择使用黑名单。 (3认同)