staging.inyokaproject.org

Kopieren von NAS per Skript nicht möglich

Status: Gelöst | Ubuntu-Version: Ubuntu 18.04 (Bionic Beaver)
Antworten |

LittleBobbyTables

Anmeldungsdatum:
1. April 2019

Beiträge: 18

Servus zusammen!

Ich habe einige Urlaubsfotos auf einem NAS, und darunter befinden sich aus mir nicht erfindlichen Gründen (dürften mit dem Mac meiner Frau zusammenhängen, denn von dort wurden die Bilder aufs NAS kopiert) etliche Dubletten. Diese enthalten (1), (2) usw im Dateinamen, und ich möchte sie per Batchscript erstmal rauskopieren. Ist das erfolgreich, lösche ich sie auf dem NAS.

Ich kann das NAS (vulgo "Cloud") per Shell mounten und dann per Skript darauf zugreifen; die Dubletten werden richtig erkannt. Was nicht klappt, ist das Kopieren. Hier heißt es:

1
2
3
4
Doppelte Datei gefunden:  /media/<ich>/Cloud/Bilder_Steiermark/IMG_20190610_074922(1).jpg
/home/<ich>/Dokumente/kopiertest.sh: Zeile 11: /media/<ich>/Cloud/Bilder_Steiermark/IMG_20190610_074922(1).jpg: Keine Berechtigung
cp: Fehlender Zieldatei‐Operand hinter '/home/<ich>/Bilder/'
„cp --help“ liefert weitere Informationen.

Das Komische ist: wenn ich dieselbe Datei "direkt" auf der Shell zu kopieren versuche, und zwar mit demselben Befehl wie im Script, funktioniert alles bestens... 🙄 Wo ist der Fehler? Berechtigungen für die Cloud hab ich, sonst würde ja der Shell-Befehl nicht klappen. Im Dateimanager kann ich auch von der "Cloud" runterkopieren und auch drauf.

Danke für eure Hilfe!

sebix Team-Icon

Ehemalige

Anmeldungsdatum:
14. April 2009

Beiträge: 5584

Wie sieht der ausgefuehrte Befehl denn aus? zB Ins Skript oben set -x einfuegen und nochmals ausfuehren.

LittleBobbyTables

(Themenstarter)

Anmeldungsdatum:
1. April 2019

Beiträge: 18

Hier mal das ganze Skript. Es gibt noch nen auskommentierten Befehl zum Mounten des NAS, aber den brauchts hier ja eigtl. nicht.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
sourcePath="/media/<ich>/Cloud/Bilder_Steiermark/*"
for file in $sourcePath; do
	if [ -d $file ]; then
		echo $file "ist Verzeichnis, überspringe..."
	elif [ -f $file ]; then
		#echo "Aktuelle Datei: " $file
		if [[ $file == *"("[1-9]")"* ]]; then
			echo "Doppelte Datei gefunden: " $file
			cp -pi $($file) /home/<ich>/Bilder/
		fi
	else
		echo "nix"
	fi
done

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

LittleBobbyTables schrieb:

Hier mal das ganze Skript. Es gibt noch nen auskommentierten Befehl zum Mounten des NAS, aber den brauchts hier ja eigtl. nicht. [...]

Ich fürchte, es ist ein Quoting-Problem, das dazu führt das < und > als Umleitungen erkannt werden. Vorschlag (ungetestet):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
sourcePath="/media/<ich>/Cloud/Bilder_Steiermark"

for file in "$sourcePath"/*; do
	if [ -d "$file" ]; then
		echo "$file ist Verzeichnis, überspringe..."
	elif [ -f "$file" ]; then
		#echo "Aktuelle Datei:  $file"
		if [[ $file == *([1-9])* ]]; then
			echo "Doppelte Datei gefunden: $file"
			cp -pi "$file" "/home/<ich>/Bilder/"
		fi
	else
		echo "nix"
	fi
done

LittleBobbyTables

(Themenstarter)

Anmeldungsdatum:
1. April 2019

Beiträge: 18

Ach, das hab ich missverständlich formuliert, entschuldige bitte. Das <ich> dient nur der Anonymisierung, dort steht realiter mein echter Name (nat. gemäß Linux Namensrichtlinien).

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

LittleBobbyTables schrieb:

Ach, das hab ich missverständlich formuliert, entschuldige bitte. Das <ich> dient nur der Anonymisierung, dort steht realiter mein echter Name (nat. gemäß Linux Namensrichtlinien).

OK, trotzdem hattest Du in Deiner Version Quoting-Probleme. Has Du die angepasste Version probiert?

LittleBobbyTables

(Themenstarter)

Anmeldungsdatum:
1. April 2019

Beiträge: 18

Danke, das klappt - wenn ich die Anführungszeichen um die Klammern wieder setze. Die doppelten Dateien heißen ja "xyz(1).jpg", "abc(2).jpg" usw. Offenbar war die Wildcard beim Dateinamen verantwortlich.

Antworten |