[英]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.