【发布时间】:2011-11-30 03:58:36
【问题描述】:
我正在尝试在 OS X (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 命令 # 输出,所以它们没有被执行……创建文件夹和复制文件名的问题都是一样的。
如果我将这些命令的“回显”版本复制并粘贴到终端窗口中,这些命令就会起作用!但是当 BASH 执行它们时,它不尊重 . :(
有什么想法吗?
谢谢!! 约翰
【问题讨论】: