2014-06-08 38 views
-2

我有一個包含361個子目錄的主目錄。在每個子目錄中,都有一個參數文件和一個可執行程序文件。可執行文件被編碼爲在可執行文件所在的目錄中查找參數文件。 (相同的可執行文件在所有子目錄中,參數文件在所有子目錄中都具有相同的文件名)使用Shell在多個子目錄中運行可執行程序文件

不是單獨執行程序文件,是否有一個cshell命令讓終端一次運行它們?

+0

_Thus,相同的可執行程序文件是在所有subdirectories_。爲什麼?這沒有意義。 – rpax

+0

因爲可執行文件被編碼爲在可執行文件所在的目錄中查找參數文件。所以,可執行文件和參數文件需要位於同一個目錄中。 – Josh

+0

由於您使用了[tag:bash]標記,因此您正在接收Bash答案,但在文本中,您說的是使用[tag:csh]。這是什麼?它們不相容;一個Bash腳本不能在C shell中工作,反之亦然(除非是非常簡單的腳本)。 – tripleee

回答

3

修訂

如果你的Linux是太舊,沒有-execdir,你可以試試這個:

find $(pwd) -name YourProgram -exec dirname {} \; | while read d; do cd "$d" && pwd; done 

如果正確打印您的程序需要的目錄的名稱運行,只需刪除pwd,並替換任何你想要做的目錄 - 大概是這樣的:

find $(pwd) -name YourProgram -exec dirname {} \; | while read d; do cd "$d" && ./YourPrgram; done 

原來的答案

喜歡這也許:

find . -type f -name YourProgramName -execdir ./YourProgramName YourParameterFile \; 

但先備份一下它看起來正確使用前。

-execdir導致find在運行命令之前切換到它找到的目錄。

如果你的命令更復雜,你可以這樣做:

find . -type f -name YourProgramName -execdir sh -c "command1; command2; command3" \; 

檢查它你想要做什麼是這樣的:

find . -type f -name YourProgramName -execdir pwd \; 
+0

已更新,請再看一次。 –

+0

如果我使用./ {}而不是「YourProgramName」,它會有所不同嗎?另外,如果可執行文件被編碼以查找參數文件,是否需要在命令中包含參數文件? – Josh

+0

我會把程序名稱放在維護代碼的任何人身上,但是你的建議也應該起作用。如果可執行文件知道如何查找參數,那麼它會正常工作而不告訴可執行文件它們在哪裏。 –

0

也許這會有所幫助。假設你在每個文件夾名爲params_file文件和一個名爲exec_file的可執行文件,然後:

for dir in `find . -maxdepth 1 -mindepth 1 -type d` ; do 
    cd $dir 
    cat params_file | xargs ./exec_file 
    cd .. 
done 
+0

我可能理解錯誤。我假定可執行文件的參數存儲在文件中。無論如何,Mark Setchell的答案會更好。 –

+0

Tudor Berariu,參數文件和可執行文件是存儲在每個子目錄中的兩個獨立文件。每個參數文件也是唯一的,儘管它在所有子目錄中都有相同的名稱。 – Josh

+0

如果您需要將「參數文件」的名稱作爲可執行文件的參數發送,則如Mark Setchell所寫,請使用'./exec_file params_file'。如果你需要傳遞「參數文件」的內容作爲參數,那麼你可能需要這個'cat params_file | xargs。/ exec_file'。但是使用'find'和'-execdir',因爲它更簡潔。 –

相關問題