当前位置:  开发笔记 > 编程语言 > 正文

如何以递归方式将子目录添加到PATH?

如何解决《如何以递归方式将子目录添加到PATH?》经验,为你挑选了2个好方法。

你怎么做呢?我的code/工作目录是在文件夹,子文件夹和子文件夹中组织的,所有这些(至少在理论上)都包含我想要定期运行的脚本或程序.



1> paxdiablo..:

在脚本的最后,添加以下行:

PATH=${PATH}:$(find ~/code -type d | tr '\n' ':' | sed 's/:$//')

这会将〜/ code树中的每个目录追加到当前路径.我自己不喜欢这个想法,更喜欢只有几个目录持有我自己的可执行文件并明确地列出它们,但是每个目录都是自己的.

如果要排除所有隐藏的目录,基本上需要删除每个具有序列的行"/."(以确保不检查隐藏目录下的子目录):

PATH=${PATH}:$(find ~/code -type d | sed '/\/\\./d' | tr '\n' ':' | sed 's/:$//')

这将阻止您获取诸如此类的目录~/code/level1/.hidden/level3/(即,一旦检测到它们被隐藏,它就会停止在子树中搜索).如果您只想保留隐藏目录,但仍允许其下的非隐藏目录,请使用:

PATH=${PATH}:$(find ~/code -type d -name '[^\.]*' | tr '\n' ':' | sed 's/:$//')

这将允许~/code/level1/.hidden2/level3/但不允许,~/code/level1/.hidden2/.hidden3/因为-name只检查文件的基本名称,而不是完整的路径名.


@Kent:不可打印的字符(包括空格)是邪恶的,如果我找到使用它们的人,我会用我的整套IBM大型机COBOL手册将它们打死:-)

2> Charles Duff..:

以下是正确的事情,包括修剪隐藏目录及其子代,并使用换行符或其他空格正确处理名称:

export PATH="${PATH}$(find ~/code -name '.*' -prune -o -type d -printf ':%p')"

我使用类似的技巧来自动设置CLASSPATHs.


非常酷,没有调用sed因为find为你处理一切......除了我有一个没有printf的find版本: - /
推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有