2016-08-05 44 views
0

我有以下幾點:即使文件確實存在

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

是否有您的文件名空間?另外,您的示例目前不可重現。 – merlin2011

+0

@ merlin2011,引用是正確的(除了$(basename「$ DPX_FOLDER」)調用的引用外),所以空格不是問題。另一方面,腳本希望'DPX_FOLDER'目錄存在於'TARGET_FOLDER'下,並且*假設可能是錯誤的。 –

+0

你剛剛創建了目標文件夾,所以它應該是空的。爲什麼文件已經存在? – Barmar

回答

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