尝试编写脚本以在删除资源后清理环境文件。问题是所有脚本都是作为输入给出的资源的名称(这不能更改),除此之外的零识别信息。 如何找到资源所在目录的路径?
目录的设置有点像下面这样,虽然要广泛得多。所有这些都是目录,而不是文件。可以有多达40多个目录可供搜索,但所需的目录通常不超过2-3个目录。
foo
aaa
aaa_green
aaa_blue
bbb
ccc
ccc_green
bar
ddd
eee
eee_green
eee_blue
fff
fff_green
fff_blue
fff_pink
我可能会像aaa_green
或ddd
那样提交输入。
作为一个例子,给定eee_blue
作为输入,我需要知道工作目录中的eee_blue
路径,这样我就可以在那里删除并删除目录。 IE,我希望返回bar/eee/eee_blue/
或bar/eee/
,两者都可以接受。
我目前可以看到的“最佳”选项是通过多个greps进入每个目录的最低级别,获取每个内容并查找匹配,并且当它(最终)匹配时保存该cd'ing为路径。坦白说,这听起来很糟糕,效率很低。
我能想到的唯一另一种替代方法是直接递归grep,但我测试了它,并且在8分钟它仍然没有完成运行。
这个脚本需要在 mac和linux 上运行,尽管在绝望的压力下我只能使用linux。
答案 0 :(得分:1)
执行此类任务的标准Unix工具是find
命令。 find
的GNU版本具有比POSIX规范更广泛的选项(相当大的余地)。 macOS Sierra(和Mac OS X)上的版本与GNU版本类似。我在Apple find
找到了OS X 10.9的在线手册,但在某个地方可能有更好的位置。
看起来您可能想要运行:
find . -name 'eee_blue'
将打印匹配文件或目录的名称,或者可能:
find . -name 'eee_blue' -exec rm -fr {} +
将在每个名称上运行rm -fr
命令。如果您愿意,可以运行您创建的自定义脚本代替rm -fr
;如果逻辑很复杂,那就是我的工作。
在自动使用rm -fr
之前,请 极其 谨慎!