2010-11-18 113 views
4

我需要在獲取目錄中的文件列表作爲運行該Java類的參數之後,從KSH腳本運行Java。KSH在變量中運行Java參數

cd /batch/App/ 
find /batch/files/ -type f -print -name "*.xls" >> $list_of_files 
/usr/java14/bin/java ConvertApp $list_of_files 

中,我認爲它會像/usr/java14/bin/java ConvertApp test1.xls test2.xls test3.xls

功能,但似乎傳遞Java的說法並不成功。任何人都有這個想法嗎?謝謝。

回答

1

你可能想看看xargs

試試這個

find /batch/files/ -type f -print -name "*.xls" | xargs /usr/java14/bin/java ConvertApp 
+0

它的工作原理類似於魅力。謝謝=) – Tsubasa 2010-11-18 10:39:44

+0

這不會運行應用程序一次爲每個文件,該文件作爲參數? – Qwerky 2010-11-18 10:46:05

+0

不,這是'xargs'的要點。它將所有文件作爲一長串參數。 – aioobe 2010-11-18 10:47:28

0

我認爲你有兩個問題。

  1. find輸出匹配每行一個,你需要轉換這使他們空格分隔,比如用awk或者sed。

  2. 你應該把輸出放到一個變量中,使用;

    list_of_files = 'find ........'

然後調用java與

java ConvertApp ${list_of_files} 
0

你被find命令發現.xls文件附加到文件$list_of_files

接下來,您要將此文件的內容作爲命令行參數發送到您的java程序。要做到這一點,您可以使用命令替換爲:

/usr/java14/bin/java ConvertApp "$(cat $list_of_files)" 

/usr/java14/bin/java ConvertApp "`cat $list_of_files`" 
1

find ... -print0 | xargs -0 ...是要走的路。

如果任何文件名中有空格,推薦cat或變量的答案將失敗。如果您不想使用xargs,如果您使用陣列,則可以獲得更好的成功機會:

saveIFS=$IFS IFS=$'\n' 
files=($(find...)) 
IFS=$saveIFS 
java ... "${files[@]}"