2011-11-30 139 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

一個人是的,不客氣;) –

相關問題