2016-09-20 2 views
-2

Hallo Ich habe ein Problem mit meinem Shell-Programm (der Code ist unten), ich sollte Datei aus dem Verzeichnis Sorg nach dest kopieren, aber wenn die Datei im Ziel vorhanden ist, sollte ich in dest/kopieren duplizieren, das Programm funktioniert nicht du kannst mir helfen, dankeErrore Unix-Programm kopieren von Ordnern

#!/bin/sh 

sorg=$1 
dest=$2 
path=$3 

cd $sorg 

for i in *.jpg 
do 
    #controllo se il file esiste nella destinazione 
    if test -f "$dest/$i" 
    then 
     #il file esiste 
     mv $i "$dest/duplicati" 
    else 
     #il file non esiste 
     mv $i "$dest" 
    fi 

done 
+2

, was ist das Problem? Bitte posten Sie Fehler, helfen Sie uns, Ihnen zu helfen ... –

+0

Das Programm kopiert nicht die Datei aus dem Ordner sorg nach dest –

+0

Haben Sie das Verzeichnis 'duplicati' erstellt? sonst verschiebt es alle Dateien in die gleiche Datei namens 'duplicati' (zu schlecht für Ihre Dateien ...) –

Antwort

1

Es ist eine schlechte Praxis, Verzeichnisse aus einer Shell heraus zu ändern. Wenn Ihre Eingabeargumente keine absoluten Pfade sind, funktioniert Ihr Skript überhaupt nicht.

Beispiel mit input und output im aktuellen Verzeichnis:

sorg=input 
dest=output 

Plus, haben Sie alle Operationen mit Zitaten zu schützen oder es wird scheitern, wenn die Dateinamen Leerzeichen darin haben (was der Fall ist, nach zu unserer Diskussion)

Zuerst führt Ihr Skript eine cd input. Da dest relativ ist, zeigt es jetzt auf input/output, die nicht existiert.

Entweder, wandeln Sie Ihre Argumente als absolute (nicht sehr gut), oder ändern, um zu vermeiden Verzeichnis (die beste Option)

ich den Code geändert haben zu ändern, so ändert Verzeichnis nicht mehr benötigt wird. Die Schwierigkeit besteht darin, den Basisnamen der Eingabedatei zu berechnen, um Zielnamen zu berechnen.

Ich habe auch die Verzeichniserstellung hinzugefügt, da es katastrophal wäre, wenn das Verzeichnis duplicati nicht existiert: Alle Duplikate würden in die gleiche Datei verschoben werden duplicati!

(Kommentare in Englisch sind von mir :))

#!/bin/sh 

sorg=$1 
dest=$2 
# this is not used, commenting out! 
# path=$3 

if [ ! -d "$dest/duplicati" ] ; then 
    mkdir "$dest/duplicati" 
    if [ $? != 0 ] ; then 
     # cannot create duplicate dir: bail out 
     exit 1 
    fi 
fi 

# scan jpg files from source directory 
for fpi in $sorg/*.jpg 
do 
    # compute basename from full source path 
    i=$(basename "$fpi") 
    #controllo se il file esiste nella destinazione 
    if test -f "$dest/$i" 
    then 
     #il file esiste  
     echo duplicate: moving $fpi to $dest/duplicati/$i   
     mv "$fpi" "$dest/duplicati/$i" 
    else 
     #il file non esiste 
     echo moving $fpi to "$dest/$i"  
     mv "$fpi" "$dest/$i" 
    fi 

done 
+0

Ich habe versucht, mit Ihrem Code, aber die Shell diese Nachricht drucken: Verwendung: mv [-f | -i | -n] [-v] Quellziel mv [-f | -i | -n] [-v] Quelle ... Verzeichnis –

+0

Können Sie Ihre Frage bearbeiten, um Ihre Argumente zu zeigen? Gibt es Raumzeichen in deinen Wegen? –

+0

gibt es keine Leerzeichen in meinem Pfad –

Verwandte Themen