Bash grep 命令查找同一个文件 5 次

Bash grep command finding the same file 5 times

我正在为 运行 另一个 bash 脚本构建一个小 bash 脚本,该脚本可在多个目录中找到。这是代码:

cd /home/mainuser/CaseStudies/

grep -R -o --include="Auto.sh" [\w] | wc -l

当我只执行那部分时,它在每个文件夹中找到相同的文件 5 次。所以我得到的不是 49 个结果,而是 245 个。我之前写过一个递归 bash 脚本,我用它作为这个问题的模板:

grep -R -o --include=*.class [\w] | wc -l

此代码一直运行完美,没有任何重复。我试过运行宁第一个代码有和没有“”,我也试过-r。我已经通读了 bash 文档,但我似乎无法找到一种方法来防止这种重复,甚至无法找到这种重复的原因。关于如何解决这个问题有什么想法吗?

作为一个单独但相关的问题,如果我可以在每个目录中启动 Auto.sh,以便将 Auto.sh 的输出转储到该目录中;而不必在每个文件夹中放置 Auto.sh。这可能比我目前正在做的更有效率,而且它也可能会解决我当前的重复问题。

这是 Auto.sh 的代码:

#!/bin/bash          
index=1
cd /home/mainuser/CaseStudies/
grep -R -o --include=*.class [\w] | wc -l
grep -R -o --include=*.class [\w] |awk '{print }' > out.txt

while read LINE; do
    echo 'Path '$LINE > 'Outputs/ClassOut'$index'.txt'
    javap -c $LINE >> 'Outputs/ClassOut'$index'.txt'
    index=$((index+1))
done <out.txt

最好我想让它只转储当前正在查看的应用程序的 javap 输出。由于这些 .class 文件可以位于任意数量的子目录中,我不确定如何将它们全部转储到顶级文件夹中,而不在每个文件的顶级目录中执行修改后的 Auto.sh申请。

好的,修复多重查找:

grep -R -o --include="Auto.sh" [\w] | wc -l

应该是:

grep -R -l --include=Auto.sh '\w' | wc -l

发生这种情况的原因是它在 Auto.sh 中寻找字母 w 的实例。在文件中出现了 5 次。

但是,不需要在每个目录中放置 Auto.sh 的整体修复是这样的:

MAIN_DIR=/home/mainuser/CaseStudies/

cd $MAIN_DIR

ls -d */ > DirectoryList.txt

while read LINE; do
    cd $LINE
    mkdir ProjectOutputs
    bash /home/mainuser/Auto.sh
    cd $MAIN_DIR
done <DirectoryList.txt

调用此 Auto.sh 代码:

index=1

grep -R -o --include=*.class '\w' | wc -l
grep -R -o --include=*.class '\w' | awk '{print }' > ProjectOutputs.txt

while read LINE; do
    echo 'Path '$LINE > 'ProjectOutputs/ClassOut'$index'.txt'
    javap -c $LINE >> 'ProjectOutputs/ClassOut'$index'.txt'
    index=$((index+1))
done <ProjectOutputs.txt

再次感谢大家的帮助!