以递归方式查找对文件的引用

时间:2017-10-06 09:45:40

标签: bash shell grep find zsh

在XML / JS / Java文件可以包含对其他此类文件的引用的项目中,我希望能够快速概述一个文件更新时需要仔细检查的内容。

因此,这意味着我需要最终查看引用已修改文件的所有文件,以及引用引用已修改文件的所有文件等(以递归方式匹配文件)。

对于一个级别,它非常简单:

grep -E -l -o --include=*.{xml,js,java} -r "$FILE" . | xargs -n 1 basename

但是如何自动匹配(grand-(grand - ))父母呢?

那怎么可能更具可读性呢?例如,树结构?

例如,如果我感兴趣的文件名为modified.js ...

show-referring-files-to modified.js

......我希望得到这样的结果:

some-file-with-ref-to-modified.xml
|__ a-file-referring-to-some-file-with-ref-to-modified.js
another-one-with-ref-to-modified.xml
|__ a-file-referring-to-another-one-with-ref-to-modified.js
    |__ a-grand-parent-file-having-ref-to-ref-file.xml
|__ another-file-referring-to-another-one-with-ref-to-modified.js

或任何其他输出(甚至是平面),可以快速检查哪些文件可能会受到更改的影响。

更新 - 当前拟议答案的结果:

ahmsff.js
|__ahmsff.xml
|  |__ahmsd.js
|  |  |__ahmsd.xml
|  |  |  |__ahmst.xml
|  |  |  |  |__BESH.java
|  |__ahru.js
|  |  |__ahru.xml
|  |  |  |__ahrut.xml
|  |  |  |  |__ashrba.js
|  |  |  |  |  |__ashrba.xml
|  |  |  |  |  |  |__STR.java
|  |  |__ahrufrp.xml
|  |  |  |__ahru.js
|  |  |  |  |__ahru.xml
|  |  |  |  |  |__ahrut.xml
|  |  |  |  |  |  |__ashrba.js
|  |  |  |  |  |  |  |__ashrba.xml
|  |  |  |  |  |  |  |  |__STR.java
|  |  |  |  |__ahrufrp.xml
|  |  |  |  |  |__ahru.js
|  |  |  |  |  |  |__ahru.xml
|  |  |  |  |  |  |  |__ahrut.xml
|  |  |  |  |  |  |  |  |__ashrba.js
|  |  |  |  |  |  |  |  |  |__ashrba.xml
|  |  |  |  |  |  |  |  |  |  |__STR.java
|  |  |  |  |  |  |__ahrufrp.xml
(...)

1 个答案:

答案 0 :(得分:1)

我在shell脚本中使用shell函数(用于递归):

假设文件名是唯一的,没有需要转义的字符:

档案:.scroller-item-wrapper { display: flex; flex-direction: column; flex-grow: 1; justify-content: center; overflow: hidden; .scroll-animator { position: relative; width: 100%; flex-shrink: 0; flex-grow: 0; transform: translateY(100%); &:not(.pre-animated){ animation-name: scrollItemIn; animation-duration: 1s; animation-timing-function: ease-out; animation-fill-mode: forwards; &:last-of-type { animation-delay: 1300ms; } } &.leaving { animation-name: scrollItemOut; animation-duration: .3s; animation-timing-function: ease-out; animation-fill-mode: forwards; transform: translateY(0%); &:last-of-type { animation-delay: 300ms; } } &:last-of-type { .scroller-item { margin-bottom: 0; } } } ... }

/usr/local/bin/show-referring-files-to

仍然有很多性能增强。

编辑:添加$ 3以防止无限循环。