Я пытаюсь создать скрипт BASH на OS X (10.6 / 10.7) для обработки папки с именем 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