2014-10-07 66 views
1

我在bash中遇到腳本問題。我的函數使用find函數的結果。在bash腳本中查找函數的結果問題

長話短說:在SSH中,找到函數返回2個結果,並在bash腳本中得到一個結果。

我試了下面兩個代碼。

for f in $(find $path -name *.properties) 
do 
echo $f 
done 

OR

list=$(find $path -name *.properties) 
for f in $list; 
do 
echo $f 
done 

在指定的路徑有幾個文件夾和文件,兩個文件中有我要找的擴展。如果我在SSH中運行這些命令中的一個,我會找到這兩個文件,但是如果我從bash腳本運行該命令,結果將包含一個文件。

for函數工作正常,問題是find函數。我在腳本bash中運行以下代碼,並且仍然有一個結果。

list=$(find $path -name *.properties) 
echo $list 

我運行SSH下面的代碼,我發現2個文件:

[[email protected] ~]# for f in $(find $path/temp/ -name *.properties); do echo $f 
> done 

誰能幫助我?

謝謝!

+2

嘗試:'找到$ PATH -name「* .properties''(即報價) – isedev 2014-10-07 13:59:36

+0

「$路徑」也是很好的措施。你也可以向我們展示你正在搜索的文件的路徑和'$ path'的值嗎? – 2014-10-07 14:00:40

+0

非常感謝@isedev!祝你今天愉快! – adimoise91 2014-10-07 14:10:39

回答

1

如果使用BASH更好的使用process substitution適當引用使用此while循環和使用-print0選項:

while IFS= read -rd '' f; do 
    echo "$f" 
done < <(find "$path" -name '*.properties' -print0) 
+1

也許建議'read -rd'''和'find -print0'? – 2014-10-07 14:01:30

+0

謝謝@EtanReisner,我做了相應的編輯。 – anubhava 2014-10-07 14:05:11

+1

非常感謝@anubhava。我也會試試這個。 :) 祝你今天愉快! – adimoise91 2014-10-07 14:11:41

0

如果使用bash 4或更高版本,使用globstar運營商,而不是一個香草調用find簡單地通過文件層次遞歸。

shopt -s globstar 
for f in "$path"/**/*.properties; do 
    echo "$f" 
done 

(如果身體真的只是echo $f,然後printf "%s\n" "$path"/**/*.properties就足夠了,而不是使用循環。)