2015-04-01 89 views
0

我有一個包含多個文件的目錄。這些文件通過網絡位置傳送;源通過scp命令發送這些文件。我有一個批處理命令將運行這些傳入的文件中的每一個;該命令運行約5-6個小時。如何查找並執行目錄中每個文件的命令?

我想下面的命令由Linux機器上運行

find Documents/wget/ -maxdepth 1 -type f -exec btaudip '{}' \; 

我的目標是啓動批​​處理程序中同時目錄中的所有文件。但是,上述命令一次只能運行一個文件。所以,爲此,我改變了這個命令如下。但失敗了。

find Documents/wget/ -maxdepth 1 -type f -exec btaudip '{}' & \; 

我該如何改變我的命令呢?

回答

1

事實是,find收集所有參數的-exec選項到第一個分號後,然後運行(EXEC)得到的命令,而不會將它們傳遞給殼體。 有了您的修改,通過find產生最後的命令是一樣的東西:

btaudip FNAME '&' 

因此在每次運行btaudip傳遞兩個參數:當前文件名(如發現find)和符號。

達到你想要什麼,你需要通過使用以下命令「&」正確地調用一個shell來處理,例如:

find Documents/wget/ -maxdepth 1 -type f -exec bash -c "btaudip '{}' &" \; 
0

我不認爲find有這種工作控制;它不是一個外殼,雖然它能夠產生炮彈,但外殼會依次運行。結果,這些shell中異步運行的命令將按順序運行。

相反,你可以重寫這個作爲外殼循環:

for f in *; do [ -f "$f" ] || continue; btaudip "$f" & done 
相關問題