2014-02-21 34 views
0

我對從我這個已關閉的問題有個新問題。 在最後一個問題中,我請求幫助修復腳本,該腳本通過內容將文件分類到文件夾。 (Bash script which sorts files to folders by it's content; How to solve wildcard in variables?在變量數組中使用特殊字符並複製到文件夾的Bash腳本

現在我遇到了一個新問題。 變量已更改。舊數組中的單個單詞變量,現在我有多個特殊字符作爲變量的單詞。

這裏是我的腳本:

#!/bin/bash 
declare -a standorte;        
standorte=('Zweigst: 00' 'Zweigst: 03' 'Zweigst: 08') 

ls lp.3.* | while read f 
do 
for ort in "${standorte[@]}"; do 
    grep -i $ort "$f" >/dev/null 2>&1 
    if [ $? -eq 0 ]; then 
     echo Copying $f to $ort 
     cp "$f" $ort 
    fi 
done 
done 

現在你看, 「ORT」 是文件夾名稱。因此,該腳本嘗試將文件lp.3。*複製到例如Zweigst:00.但沒有逃生反斜槓它不起作用。我把charakters轉換成變量,腳本不起作用,因爲在文件lp.3。*中沒有「Zweigst:\ 00」。

我認爲,我必須爲「ort」聲明一個新的變量,在其中放置文件夾名稱。 但我不知道如何改變for循環。我必須說腳本,當你發現Zweigst:00將這個文件複製到文件夾「zweigst00」。對不起,我的bash腳本經驗並不好。我無法自己改變這一點。

我有多個(零到無限)lp.3 *文件(例如lp.3.1,lp.3.2,lp.3.5.2等) 在這個文件中是這樣的文字:。http://pastebin.com/0ZzCUrpx

回答

0

您只需引用以下變量:

for ort in "${standorte[@]}"; do 
    grep -i "$ort" "$f" >/dev/null 2>&1 
#   ^----^-------- quotes needed 
    if [ $? -eq 0 ]; then 
     echo Copying $f to $ort 
     cp "$f" "$ort" 
#    ^----^-------- quotes needed 
    fi 
done 

爲什麼?因爲否則這

grep -i $ort "$f" >/dev/null 2>&1 

得到的東西,grep不能正確理解展開:

grep -i Zweigst: 00 "$f" >/dev/null 2>&1 

看到它正試圖從文件00用grep Zgeigst:

+0

我試過這個,它工作,當我重命名文件夾。 「00」或「03」是正確的文件夾和文件的指示符。但是這不會讓我產生這樣的結果嗎? http://pastebin.com/yeaY71p2 – user3048888

+0

嗯,我想你也應該在'cp' --->'cp「$ f」「$ ort」'中引用它來正確複製。我也更新我的答案。 – fedorqui

+1

很感謝!我以爲我必須改變這麼多,但是這很容易,我不敢相信。 :) – user3048888

相關問題