2011-12-18 22 views
0

我有一堆文件夾,文件只能有一個網址,它即如何列出文件名到函數

http://itunes.apple.com/us/app/keynote/id361285480?mt=8 

這裏是我的代碼。我怎樣才能讓它爲每個文件中的每個URL執行此操作?

var='{"object":"App","action":"scrape","args":{"itunes_url":"!!!!HERE!!!!"}}'   
string=$(echo "$var" | sed -e 's/"/\\"/g') 
string='{"request":"'"$string"'"}' 
api="http://api.lewis.com" 
output=$(curl -s -d "request=$string" "$api") 

code=$(echo "$output" | tr '{', '\n' | sed -n "2p" | sed -e 's/:/ /' | awk '{print $2}') 
if [ "${code:0:1}" -ne "2" ]; then 
    # :(
    echo "Error: response code $code was returned, " 
else 
    string=$(echo "$output" | tr '{', '\n' | sed -e '/"signature":\(.*\)/d;/"data":\(.*\)/d;/"signature":\(.*\)/d;/"code":\(.*\)/d' |sed -e 's/\\"//g;s/\\\\\\\//\//g;s/\\//g' | tr '}', '\n' | sed -e 's/"//' | sed '/^$/d') 
    echo "$string" 
fi 

回答

1

使用一個for循環

for filename in folder/*; do 
-- your code where you do something using $filename -- 
done 

OG如果你願意給文件名作爲參數到劇本:

for filename do 
-- your code where you do something using $filename -- 
done 

然後運行腳本,然後將文件

./script.sh folder/* 
+0

問題是我不知道我需要使用ls或什麼的文件的名稱? – 2011-12-18 13:36:57

+0

*表示該文件夾中的所有文件。如果你想讓文件名中包含'bla'的所有文件,你可以寫* bla *。 – 2011-12-18 14:30:41

+0

我剛剛寫了文件夾/ *以匹配名爲'文件夾'的文件夾中的所有文件。 – 2011-12-18 14:31:40

0

你可以這樣做:

for file in *; do 
    for line in $(cat $file); do 
     # Stuff goes here 
    done 
done 

甚至只是:

for line in $(cat *); do 
    # Stuff goes here 
done 
+0

問題是我不知道我需要使用ls什麼的文件的名稱? – 2011-12-18 13:38:21

+0

@lewis:這就是'*'通配符的用途。如果你想迭代所有的txt文件,把上面的代碼改成'for * in .txt中的文件; do'。 – 2011-12-18 13:40:07