Ниже приведен фрагмент сценария, над которым я работаю для резервного копирования мультимедиа. Сценарий выполняется, как ожидается, при вызове из командной строки терминала. Однако после переноса скрипта с Platypus в приложение создается целевой каталог, но цикл For Loop не запускается и медиафайлы не копируются в папку назначения. Кто-нибудь знает, что я делаю неправильно здесь?Для Loop Breaks после упаковки Platypus
#!/bin/sh
DEST_PATH=/Volumes/MediaBackup
mkdir -p $DEST_PATH
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
for i in $(find "$PWD" -iname "*.jpg")
do
FILENAME="$(basename $i)"
MD5="$(md5 -q $i)"
cp "$i" "$DEST_PATH/$MD5-$FILENAME"
done
IFS=$SAVEIFS
Нежные парни и/или дамы, СПАСИБО! Ниже приведен рабочий сценарий с использованием ваших комментариев. Спасибо за быстрый поворот. Должно было сделать эти дни назад.
#!/bin/bash
DEST_PATH=/Volumes/PrivateMain/Media
mkdir -p $DEST_PATH
SAVEIFS=$IFS
IFS=$(printf "\n\b")
for i in $(find "/Users" -iname "*.jpg")
do
FILENAME="$(basename $i)"
MD5="$(md5 -q $i)"
cp "$i" "$DEST_PATH/$MD5-$FILENAME"
done
IFS=$SAVEIFS
Возможно ли, что Platypus меняет ваш текущий рабочий каталог? Вы явно называете выходной каталог, поэтому нет никакой двусмысленности относительно того, куда это будет идти, но если бы '$ PWD' изменился, вы можете быть где-то там, где' find' появляется пустым. –
Возможно, не связанный, но см. [Bash FAQ 001] (http://mywiki.wooledge.org/BashFAQ/001) для правильного пути итерации вывода 'find'. – chepner
Похоже, что вы запускаете свой скрипт с 'bash' из командной строки, но он запускается с'/bin/sh' в версии, завершенной Platypus. 'echo' будет вести себя по-разному в каждом случае. (А именно, '-e' обрабатывается'/bin/sh' как строковая строка для вывода, а не опция для обработки экранированных символов.) Вместо этого используйте 'printf '\ n \ b'' для переносимого поведения. – chepner