2011-11-30 90 views
2

我想在OS X(10.6/10.7)上建立一个BASH脚本来处理一个名为QCExports的文件夹,它具有格式为人名的文件夹“最后,第一”,即“邦德,詹姆斯”。OSX Bash脚本与名称中的空格使用文件/文件夹

当我运行下面的脚本时,一切正常,但它会在文件夹或文件名中留下空间。

脚本代码:

#!/bin/bash 
echo "QuickCeph Export Script" 

#Set Path to Process & Paths to Copy To 
pathToQCExports=/Users/myuser/Desktop/QCExports 
sureSmilePath=/Users/myuser/Desktop/QCExportsForSureSmile 
sesamePath=/Users/myuser/Desktop/QCExportsForSesame 
blankReplace="" 

#Process Each Name 
find $pathToQCExports -type d | while read name ; do 

    #escaping the folder with a space in the name 
nameParsed=${name/", "/",\ "} 

    echo "Processing: "$nameParsed 
    pathSureSmile=${nameParsed/$pathToQCExports/$sureSmilePath} 
    pathSesame=${nameParsed/$pathToQCExports/$sesamePath} 
    mkdir $pathSesame 
    mkdir $pathSureSmile 

    echo "Folders Created" 

    #Copy For SureSmile 
    echo ${pathSureSmile}"/Suresmile-Frontal\ Photo.jpg" ${pathSureSmile}"/Suresmile-Frontal\ Photo.jpg" 
    #cp `${$pathSureSmile}"/Suresmile-Frontal\ Photo.jpg" ${pathSureSmile}"/Suresmile-Frontal\ Photo.jpg"` 

    #Copy For Sesame 
    echo ${pathSesame}"/Suresmile-Frontal\ Photo.jpg" ${pathSesame}"/S02.jpg" 
    #cp `${pathSesame}"/Suresmile-Frontal\ Photo.jpg" ${pathSesame}"/S02.jpg"` 

done 

echo "Completed"; 

输出:

QuickCeph Export Script 
Processing: /Users/myuser/Desktop/QCExports/BOND,\ James 
mkdir /Users/myuser/Desktop/QCExportsForSesame/BOND,\ James 
mkdir: James: File exists 
mkdir /Users/myuser/Desktop/QCExportsForSureSmile/BOND,\ James 
mkdir: James: File exists 
Folders Created 
/Users/myuser/Desktop/QCExportsForSureSmile/BOND,\ James/Suresmile-Frontal\ Photo.jpg /Users/myuser/Desktop/QCExportsForSureSmile/BOND,\ James/Suresmile-Frontal\ Photo.jpg 
/Users/myuser/Desktop/QCExportsForSesame/BOND,\ James/Suresmile-Frontal\ Photo.jpg /Users/myuser/Desktop/QCExportsForSesame/BOND,\ James/S02.jpg 
Completed 

在OS X上通常是在终端,您使用\逃脱一个文件夹或文件名中的空间,但不似乎工作。

我注意到它将解释空间,因为正常空间会在命令行中解释,并且认为我想对两个文件执行命令 - 即它不会向前传递\。我最终得到一个名为“Bond,\”的文件夹和一个名为“James”的文件夹,该文件夹用于执行脚本。

请注意,我刻意将cp命令排除在外,所以它们不会被执行......问题与创建文件夹&复制文件名相同。

如果我将这些命令的“echo'd”版本复制并粘贴到终端窗口中,则这些命令正常工作!但是当BASH执行它们时,它并不尊重它。 :(

任何想法?

谢谢! 约翰

回答

1

见我修改你的脚本,你不必像你试图替代空间。 此外,你必须选择,如果你反斜线的空间,或者如果您正在使用引号。 最简单的方法是使用双引号。 良好的文档有关的报价,看http://mywiki.wooledge.org/Quoteshttp://wiki.bash-hackers.org/syntax/words

#!/bin/bash 
echo "QuickCeph Export Script" 

#Set Path to Process & Paths to Copy To 
pathToQCExports=/Users/myuser/Desktop/QCExports 
sureSmilePath=/Users/myuser/Desktop/QCExportsForSureSmile 
sesamePath=/Users/myuser/Desktop/QCExportsForSesame 
blankReplace="" 

#Process Each Name 
find $pathToQCExports -type d | while read nameParsed ; do 

    echo "Processing: $nameParsed" 
    pathSureSmile="${nameParsed/$pathToQCExports/$sureSmilePath}" 
    pathSesame="${nameParsed/$pathToQCExports/$sesamePath}" 
    mkdir "$pathSesame" 
    mkdir "$pathSureSmile" 

    echo "Folders Created" 

    #Copy For SureSmile 
    echo "${pathSureSmile}/Suresmile-Frontal Photo.jpg" "${pathSureSmile}/Suresmile-Frontal Photo.jpg" 

    #Copy For Sesame 
    echo "${pathSesame}/Suresmile-Frontal Photo.jpg" "${pathSesame}/S02.jpg" 

done 

echo "Completed" 
+0

完美!你是男人(或女人)。非常感谢!!! –

+0

一个人是的,不客气;) –

相关问题