我通過查看目錄中所有檔案的 Execute 命令制作了以下腳本:
find /home/user/test/* -maxdepth 1 -type f -name '*.conf' -exec /home/user/program --config "{}" \;
我有一堆.conf檔案/home/user/test/,我希望程式一次在所有這些檔案上運行。該程式用于模擬網路流量,因此會不斷運行,直到停止使用Ctrl C.
如果我手動打開新的螢屏會話并分別在每個.conf檔案上運行命令,它作業正常,但是我試圖找出一種方法,只對所有.conf檔案運行一次命令。
我撰寫的腳本應該適用于所有檔案,但它似乎只加載一個。知道我做錯了什么嗎?
uj5u.com熱心網友回復:
該程式用于模擬網路流量,因此會不斷運行,直到使用 Ctrl C 停止。
有你的問題。find不做并行或在后臺運行任何東西;它運行程式并等待它完成,然后再轉到下一個檔案。
一種選擇是通過shshell 命令列間接呼叫命令,這允許您將其置于后臺&:
find ... -exec /bin/sh -c "/home/user/program --config {} &" \;
缺點是program如果你想阻止它們,你必須手動找到并殺死每個生成的,或者使用類似killall.
另一個選擇是 GNU parallel,它確實可以讓你更好地控制你的作業。
第三個選項,如果你可以修改的話/home/user/program,是實作一個類似--backgroundor的標志--daemonize,告訴它在啟動后直接進入后臺。
uj5u.com熱心網友回復:
find查找作為引數列出的所有路徑。通常只給出一個目錄,但指定多個引數是有效的。例如, find . -print將列出當前作業目錄中和下的所有名稱,并在andfind alice bob -print下查找。如果其中一個或本身是常規檔案的名稱,則將簡單地列印該名稱。在您的情況下,您正在使用 shell 擴展glob 并在與 glob 匹配的所有名稱上執行。該 glob 不匹配任何以最終組件開頭的名稱(也稱為“dotfiles”或“隱藏檔案”),因此您將看不到任何這些名稱。你想省略 glob,只給一個路徑引數:alicebobalicebob*find/home/user/test/*.find
find /home/user/test -maxdepth 1 ...
這樣 find 將查看 /home/user/test 中及其下的所有內容
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/515833.html
標籤:重击
