我的~/bin
文件夹包含具有任意目录级别的多个子文件夹。
该文件夹仅存放启动zsh时需要添加的可执行文件path
,如何以$path
简短有效的方式递归添加其文件夹及其子文件夹下的所有文件?
答案1
mkdir -p ~/tmp/a/b/c/{d,e}
path+=(~/tmp/a ~/tmp/a/**/*(N/))
print -l $path
这应该递归地将两者添加~/tmp/a
到PATH
变量以及任何目录中。不像*(/)
**
链接问题这可以避免缓慢分叉到find(1)
.
如果其中没有(非隐藏)目录,则限定符N
不会将其视为错误。
答案2
考虑也stow
。
stow
是一个允许您在子目录中创建一组包的工具:它有助于将内容分开,同时将它们保持在一起。它通过在根目录(例如~/bin
)中创建指向它们的链接来实现此目的,并帮助您在添加和删除文件时管理这些链接。
它经常被使用,因为/usr/local
它将链接到各个子目录(etc、bin、lib ...)中的各种文件。这样就不需要更新了$PATH
。
所以如果你有
- 套餐1
- 垃圾桶
- 仓1
- 仓2
- 垃圾桶
- 套餐2
- 垃圾桶
- 仓3
- 仓4
- 垃圾桶
那么你最终会得到
- bin1 -> 包1/bin/bin1
- bin2 -> 包1/bin/bin2
- bin3 -> 包2/bin/bin3
- bin4 -> 包2/bin/bin4
- 套餐1
- 垃圾桶
- 仓1
- 仓2
- 垃圾桶
- 套餐2
- 垃圾桶
- 仓3
- 仓4
- 垃圾桶