繁体   English   中英

递归查找对文件的引用

[英]Find references to files, recursively

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

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

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

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

但是,我该如何自动化以匹配(祖父母)?

以及如何使它更具可读性? 例如,带有树形结构?

例如,如果我感兴趣的文件称为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
(...)

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

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

文件: /usr/local/bin/show-referring-files-to

#!/bin/sh

get_references() {
    grep -F -l --include=*.{xml,js,java} -r "$1" . | grep -v "$3" | while read -r subfile; do
        #read each line of the grep result into the variable subfile
        subfile="$(basename "$subfile")"
        echo "$2""$subfile"
        get_references "$subfile" '   '"$2" "$3"'\|'"$subfile"
    done
}

while test $# -gt 0; do
    #loop so more than one file can be given as argument to this script
    echo "$1"
    get_references "$1" '|__' "$1"
    shift
done

仍有许多性能增强的可能。

编辑 :增加了$ 3,以防止无限循环。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM