我在構建一個小bash腳本來運行在多個目錄中找到的另一個bash腳本。這裏的代碼:Bash grep命令找到同一個文件5次
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
此代碼一直非常完美,沒有任何重複。我嘗試了運行第一個代碼,但沒有運行「」,我也嘗試過了。我已經閱讀了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 $3}' > 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。
嘗試引用''[\ w]''模式?另外,如果'Auto.sh'將其輸出寫入當前目錄,那麼肯定可以避免擁有49個文件副本。只需'pushd $ dir; /abs/path/to/Auto.sh;彈出「在目錄中的循環。 –
添加''的數字已增加到343.這意味着它現在在每個目錄中找到兩個額外的條目。我應該對第二個問題更具體一些。 Auto.sh遍歷每個子目錄,並對每個找到的.class文件執行一個javap函數。它目前將所有內容輸出到一個文件夾,但我想通過應用程序分解輸出。所以我想在應用程序的頂層目錄中執行它,並將該應用程序的所有javap信息輸出到應用程序頂層目錄中的單個文件夾中。我可以發佈上面的Auto.sh代碼。 – TheNoviceAllen
'-o'會打印出每個匹配,所以你確定這個模式不合法匹配5次?如果你只是想知道哪些文件有匹配,你可以使用'-l'而不是'-o' –