if语句[-f $ file]不起作用

时间:2016-08-05 00:19:07

标签: bash

我有以下内容:

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语句并且每次都运行。我的陈述有问题吗?

1 个答案:

答案 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