Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos OSX Bash脚本处理名称中带有空格的文件/文件夹_Macos_Bash_Spaces - Fatal编程技术网

Macos OSX Bash脚本处理名称中带有空格的文件/文件夹

Macos OSX Bash脚本处理名称中带有空格的文件/文件夹,macos,bash,spaces,Macos,Bash,Spaces,我正试图在OSX(10.6/10.7)上构建一个BASH脚本来处理一个名为QCExports的文件夹,该文件夹中的人名格式为“LAST,First”,即“BOND,James” 当我运行下面的脚本时,一切正常,但它落在文件夹或文件名上,其中有一个空格 脚本代码: #!/bin/bash echo "QuickCeph Export Script" #Set Path to Process & Paths to Copy To pathToQCExports=/Users/myuser/

我正试图在OSX(10.6/10.7)上构建一个BASH脚本来处理一个名为QCExports的文件夹,该文件夹中的人名格式为“LAST,First”,即“BOND,James”

当我运行下面的脚本时,一切正常,但它落在文件夹或文件名上,其中有一个空格

脚本代码:

#!/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执行它们时,它不尊重:(

有什么想法吗

谢谢!!
John

查看我对脚本的修改,您不必像尝试过的那样替换空格。 此外,您必须选择是将空格反斜杠还是使用引号。 简单的方法是使用双引号。 关于报价的好文档,请参见和

#!/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"