我對從我這個已關閉的問題有個新問題。 在最後一個問題中,我請求幫助修復腳本,該腳本通過內容將文件分類到文件夾。 (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
我試過這個,它工作,當我重命名文件夾。 「00」或「03」是正確的文件夾和文件的指示符。但是這不會讓我產生這樣的結果嗎? http://pastebin.com/yeaY71p2 – user3048888
嗯,我想你也應該在'cp' --->'cp「$ f」「$ ort」'中引用它來正確複製。我也更新我的答案。 – fedorqui
很感謝!我以爲我必須改變這麼多,但是這很容易,我不敢相信。 :) – user3048888