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
, was ist das Problem? Bitte posten Sie Fehler, helfen Sie uns, Ihnen zu helfen ... –
Das Programm kopiert nicht die Datei aus dem Ordner sorg nach dest –
Haben Sie das Verzeichnis 'duplicati' erstellt? sonst verschiebt es alle Dateien in die gleiche Datei namens 'duplicati' (zu schlecht für Ihre Dateien ...) –