我有下面的代碼,它試圖找到匹配某些模式的所有文件,並將它們複製到一個新目錄,如果文件已經存在,則添加一個後綴。這是因爲重複的文件名出現在原始列表中 - 因爲它們可以在不同的目錄中找到。Bash腳本循環查找命令:輸出有空格
它的工作原理與預期的一樣,只是包含spaces
的fot文件名以for in loop
作爲分隔符。
此代碼來自stackoverflow的各個部分,我已經使用過這些代碼,但我並沒有完全理解。
我已經嘗試過引用文件名的各種組合,只是我用空格複製文件。
能有人建議,我怎麼能解決這個問題
patterns=("wom*.gif" "StarB*.gif" "logos*.gif")
for pattern in "${patterns[@]}"
do
for fname in $(find $source -name $pattern);
do
echo Path-and-Filename: $fname
filename=$(basename "$fname")
extension=${filename##*.}
filename=${filename%.*}
echo Just-Filename: $filename.$extension
suffix=""
count=0
while [ -f $dest$filename$suffix.$extension ]
do
count=$(($count+1))
suffix="("$count")"
done
cp -v -p "$fname" $dest"$filename"$suffix.$extension >>$dest"CopyImageFiles-"$(date +"%Y-%m-%d").log 2>>$dest"CopyImageFiles-"$(date +"%Y-%m-%d").log
done
done
對不起 - 它沒有出現任何不同,帶空格的文件名在空格字符的'for in loop'中創建了多個條目。 – mcl 2013-03-07 11:51:50
錯誤。你不能以這種方式迭代文件名。至少你已經幫助提高了可能性,在解決問題之前腳本不會失敗。 – ormaaj 2013-03-07 11:56:29
@mcl看到關於練習的附加行;-) – 2013-03-07 12:00:40