2016-05-31 89 views
2

這是我的場景,我有一個名爲A的根文件夾,其中包含具有n種可能性的文件夾B,C,D。這些文件夾中的每一個都有一個bash腳本。我如何獲得這些bash腳本並使用bash腳本運行它們。Bash在所有目錄中獲取具有名稱的特定文件並運行腳本

A/B/run.sh 
A/C/run.sh 
A/D/run.sh 
+0

做他們需要的任何參數呢?訂單是否重要? – Rob

+0

訂單無關緊要,它們不需要任何參數 – yetanotherposter

+1

糟糕,您忘記發佈您的代碼! StackOverflow是關於幫助人們修復他們的代碼。這不是免費的編碼服務。任何代碼都比沒有代碼更好。即使你不知道如何編寫它,甚至元代碼也會演示你如何看待程序應該起作用。 – ghoti

回答

3

容易:)

eval "$(ls A/*/run.sh)" 

LS將返回文件的列表,路徑到腳本。 (你可以使用發現過)

的「」周圍的$()將確保結果保持新線

EVAL將執行返回的行爲腳本。

請注意,如果腳本和內容的名稱中有空格,這可能是一個脆弱的解決方案。但是,如果它看起來像你所顯示的,那應該很好。

這是一個示例輸出:

~/ eval "$(ls */run.sh)" 
I am running and my name is: one/run.sh 
I am running and my name is: two/run.sh 

的run.sh腳本是:

echo "I am running and my name is: $0" 
+0

謝謝按預期工作! – yetanotherposter

+0

很高興我可以幫助.. – Rob

+1

@yetanotherposter:另一種解決方案更一般,你可以很容易地適應非標準的目錄名稱。 – sjsam

5

隨着發現:

find . -name *.sh -type f -exec bash -c '[[ -x {} ]] || chmod u+x {}; {}' \; 

對於每個*.sh發現:

  • 檢查文件是否具有執行權限
  • 如果沒有設置執行權限的用戶
  • 執行腳本
+1

這應該是最好的遞歸解決方案。 :-) – sjsam

+1

我發現bash的'globstar'功能比find更快速地查找事物。因人而異。無論如何我的+1,因爲這是優於嵌入式'ls'解決方案。 – ghoti

+0

@ ghoti感謝'globstar'技巧。 – SLePort

相關問題