2016-03-19 12 views
0

文件夹我有此脚本巴什 - 脚本错误,如果用空格

#!/bin/bash 

rename_files() { 
    title="${1##*${2} - }" 
    for filename in "$1/"*.*; do 
    case "${filename##*.}" in 
    doc|doc|doc) 
     mkdir -p -m 777 "/Users/Desktop/Documents Share/Downloaded/${title}" 
     new_path="/Users/Desktop/Documents Share/Downloaded/${title}/${title}.${filename##*.}" 
     let "iters=1" 
     while [ -f $new_path ] ; do 
      new_path=$new_path"$iters" 
      let "iters++" 
     done 
     echo "moving $filename -> $new_path" 
     mv "${filename}" "${new_path}" 
     ;; 
    esac 
    done 
} 

rename_category() { 
    for path in "/Users/Desktop/Documents Share/Downloads/${1}"*; do 
    rename_files "$path" "$1" 
    done 
} 

rename_category DOC 

这个脚本会自动移动,重命名包含在/Users/Desktop/Documents Share/Downloaded文件。如果我使用名为Documents而不是Documents Share的文件夹,所有工作都正常。我试图使用Documents\ Share,但它不起作用。

以下是错误日志

/Users/Desktop/Script.sh: line 11: [: /Users/Desktop/Documents: binary operator expected 

我该如何解决呢?

+0

'案例“$ {filename ## *。}”in doc | doc | doc)'?问心无愧?祝你好运。 – shellter

+0

只有一个扩展示例。 – DylanDog

回答

1

引用变量无处不在。双引号中缺少指定的行:

while [ -f $new_path ] ; do 

shoudl是

while [ -f "$new_path" ] ; do 
+0

非常感谢!现在它工作了! – DylanDog

1

我想$ new_path(第11行)应该用双引号括起来。

+0

非常感谢!你的回答对我有帮助,但是choroba在你面前几分钟就回答了;我真的很抱歉,我不能将最好的答案标记为多于一个答案。 – DylanDog

+0

是的,我知道。别担心,我很高兴有用。 也许下次再来 – Process0