2016-08-05 6 views
0

funktioniert nicht ich folgendes haben:

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 

Mein Skript hallt nicht "$file" exists, skipping, selbst wenn die Datei vorhanden ist. Es geht zur else-Anweisung und führt das jedes Mal aus. Stimmt etwas nicht mit meiner Aussage?

+0

Gibt es Leerzeichen in Dateinamen? Außerdem ist Ihr Beispiel derzeit nicht reproduzierbar. – merlin2011

+0

@ merlin2011, das Zitat ist korrekt (abgesehen von der Quotation des Aufrufs '$ (Basisname" $ ​​DPX_FOLDER ")), so dass Leerzeichen kein Problem sind. Auf der anderen Seite erwartet das Skript, dass das 'DPX_FOLDER'-Verzeichnis unter 'TARGET_FOLDER' existiert und * diese * Annahme wahrscheinlich falsch ist. –

+0

Sie haben gerade den Zielordner erstellt, er sollte also leer sein. Warum sollte die Datei bereits existieren? – Barmar

Antwort

1

Dies ist fast sicher ein Fall, in dem DPX_FOLDER Pfadelemente enthält, die Sie nicht in Ihrem Ziel möchten.

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

... bedeutet, dass Sie file Werte haben werden, die also aussehen /Users/hello/world/123DPX/foo

wird "${TARGET_FOLDER}"/"$file" wie folgt aussehen:

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

Unter der Annahme, dass Sie /Users unter keinen haben Ihr anderer /Users, dann, den einen Pfad an den anderen anzuhängen, ist einfach falsch. Statt

Bedenken Sie:

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