【发布时间】:2017-02-11 04:55:04
【问题描述】:
以下是我正在编写的用于媒体备份的脚本的 sn-p。当从终端命令行调用时,脚本会按预期运行。但是,在使用 Platypus 将脚本包装到应用程序后,会创建目标目录,但不会运行 For 循环,并且不会将媒体复制到目标文件夹。有谁知道我在这里做错了什么??
#!/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
绅士和/或女士们,谢谢!下面是使用 cmets 的工作脚本。感谢您快速转身。应该在几天前完成。
#!/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 了解迭代
find输出的正确方法。 -
听起来您是在命令行中使用
bash运行脚本,但在Platypus 包装版本中它是使用/bin/sh运行的。echo在每种情况下都会表现不同。 (即,-e被/bin/sh视为要输出的文字字符串,而不是启用转义字符处理的选项。)使用printf '\n\b'代替可移植行为。
标签: bash shell backup platypus