2016-08-05 23 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 ")'の呼び出しの引用符を除いて)、スペースは問題ではありません。一方、スクリプトは 'TARGET_FOLDER'の下に' DPX_FOLDER'ディレクトリが存在することを期待しています。*仮定*はおそらく間違っています。 –

+0

ターゲットフォルダを作成したばかりなので、空にする必要があります。なぜファイルが既に存在するのでしょうか? – Barmar

答えて

1

これはほとんどの場合、DPX_FOLDERにあなたの目的地に入れたくないパス要素が含まれている場合です。あなたは下の1 /Usersを持っていないと仮定すると

/Users/medialab/Desktop/07_DPX_checksums/world/Users/hello/world/123DPX/foo 
#\---- "${TARGET_FOLDER}" -------------------/ |--- file -----------------| 
#            |--- "${DPX_FOLDER}"----| * 

DPX_FOLDER=/Users/hello/world 
for file in "${DPX_FOLDER}"/*DPX/* ; do 

は...あなたは/Users/hello/world/123DPX/foo

ように見えるfile値はこのように、"${TARGET_FOLDER}"/"$file"は次のようになります持っているだろうことを意味しあなたの他の/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 
関連する問題