我有以下内容:
while [ "${*}" != "" ] ; do
DPX_FOLDER="${1}"
TARGET_FOLDER="/Users/medialab/Desktop/07_DPX_checksums"/$(basename "${DPX_FOLDER}")
mkdir "${TARGET_FOLDER}"
echo
for file in "${DPX_FOLDER}"/*DPX/* ; do
if [ -f "${TARGET_FOLDER}"/"$file" ] ; then
echo "$file" exists, skipping
else rsync -aPhi "$file" "${TARGET_FOLDER}"
fi
break 1
done
即使文件存在,我的脚本也不会回显"$file" exists, skipping
。它转到else语句并且每次都运行。我的陈述有问题吗?
答案 0 :(得分:1)
几乎可以肯定,DPX_FOLDER
包含您不希望在目的地中使用的路径元素。
DPX_FOLDER=/Users/hello/world
for file in "${DPX_FOLDER}"/*DPX/* ; do
...表示您的file
值看起来像/Users/hello/world/123DPX/foo
因此,"${TARGET_FOLDER}"/"$file"
将如下所示:
/Users/medialab/Desktop/07_DPX_checksums/world/Users/hello/world/123DPX/foo
#\---- "${TARGET_FOLDER}" -------------------/ |--- file -----------------|
# |--- "${DPX_FOLDER}"----| *
假设您在另一个/Users
下没有/Users
,那么将一条路径添加到另一条路径上就完全错了。
改为考虑:
for file in "${DPX_FOLDER}"/*DPX/* ; do
if [ -f "${TARGET_FOLDER}/${file##*/}" ] ; then
echo "$file exists, skipping"
else
rsync -aPhi "$file" "${TARGET_FOLDER}"
fi
done