ubuntuusers.de

cp - Wildcard funktioniert nicht

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

Kleiner_Kobold_2

Avatar von Kleiner_Kobold_2

Anmeldungsdatum:
18. Januar 2019

Beiträge: 177

Ich will von einer debianpartition eine Datei (.ods) nach Ubuntu kopieren

sudo cp -u -r '/media/merlin/Debian 9.8/home/merlin/Schreibtisch/*ods' '/home/merlin/Schreibtisch/Strom-Gas'     

Als Ausgabe erhalte ich im Terminal: Passwort für merlin:

cp: Aufruf von stat für '/media/merlin/Debian 9.8/home/merlin/Schreibtisch/*ods' nicht möglich: Datei oder Verzeichnis nicht gefunden

Wie passt man mein Script richtig an?

mrkramps Team-Icon

Avatar von mrkramps

Anmeldungsdatum:
10. Oktober 2006

Beiträge: 5523

Wohnort: south central EL

Du verwendest Single Quotes, weswegen die Wildcard buchstäblich als * interpretiert wird. Du muss Double Quotes verwenden, damit die Leerzeichen im Pfad korrekt maskiert werden, aber der reguläre Ausdruck erhalten bleibt.

echo "$(echo foobar)"
foobar

echo '$(echo foobar)'
$(echo foobar) 

Kleiner_Kobold_2

(Themenstarter)
Avatar von Kleiner_Kobold_2

Anmeldungsdatum:
18. Januar 2019

Beiträge: 177

mrkramps Ich hatte es so gemacht:

sudo cp -u -r '/media/merlin/Debian 9.8/home/merlin/Schreibtisch/*.*ods' '/home/merlin/Schreibtisch/Strom-Gas'     
Passwort für merlin:         
cp: Aufruf von stat für '/media/merlin/Debian 9.8/home/merlin/Schreibtisch/*.*ods' nicht möglich: Datei oder Verzeichnis nicht gefunden

Also immer noch fehler!?

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4453

Wohnort: Göttingen

Beachte doch mal den Hinweise von mrkramps.

Kleiner_Kobold_2

(Themenstarter)
Avatar von Kleiner_Kobold_2

Anmeldungsdatum:
18. Januar 2019

Beiträge: 177

Du muss Double Quotes verwenden,

Doppelquotes kenne ich nicht.

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4453

Wohnort: Göttingen

Double Quotes sind die doppelten Anführungszeichen, also die hier: "

Kleiner_Kobold_2

(Themenstarter)
Avatar von Kleiner_Kobold_2

Anmeldungsdatum:
18. Januar 2019

Beiträge: 177

Doc_Symbiosis

sudo cp -u -r "'/media/merlin/Debian 9.8/home/merlin/Schreibtisch/*.ods'" '/home/merlin/Schreibtisch/Strom-Gas'     
cp: Aufruf von stat für ''\''/media/merlin/Debian 9.8/home/merlin/Schreibtisch/*.ods'\''' nicht möglich: Datei oder Verzeichnis nicht gefunden

Immernoch fehler

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4453

Wohnort: Göttingen

Du musst Du double quotes anstelle der single quotes verwenden, siehe Bash-Skripting-Guide für Anfänger

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17625

Wohnort: Berlin

Du kannst auch Singlequotes nutzen, nur eben nicht ums Sternchen. Das sieht zwar falsch aus, aber ist dennoch richtig:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# Deins
sudo cp -u -r '/media/merlin/Debian 9.8/home/merlin/Schreibtisch/*ods' '/home/merlin/Schreibtisch/Strom-Gas'
# Meins - vor dem Asterix die Quotierung schließen:
sudo cp -u -r '/media/merlin/Debian 9.8/home/merlin/Schreibtisch/'*ods '/home/merlin/Schreibtisch/Strom-Gas'
# oder schon nach dem letzten Zeichen, das der Maskierung bedarf (nebenbei braucht der zweite Pfad keiner Maskierung):
sudo cp -u -r '/media/merlin/Debian '9.8/home/merlin/Schreibtisch/*ods /home/merlin/Schreibtisch/Strom-Gas
# oder oder auch erst vor dem ersten Zeichen, das der Maskierung bedarf, damit beginnen:
sudo cp -u -r /media/merlin/Debian' '9.8/home/merlin/Schreibtisch/*ods /home/merlin/Schreibtisch/Strom-Gas
# oder auch das gleiche mit Doppelquotes:
sudo cp -u -r /media/merlin/Debian" "9.8/home/merlin/Schreibtisch/*ods /home/merlin/Schreibtisch/Strom-Gas
# oder das giftige Blank mit Backslash maskieren:
sudo cp -u -r /media/merlin/Debian\ 9.8/home/merlin/Schreibtisch/*ods /home/merlin/Schreibtisch/Strom-Gas

Das Syntaxhighlightening hier und auch in den meisten Editoren steigt da allerdings aus. Ich wollte es auch nicht programmieren müssen.

Prinzipiell gilt, das Leerzeichen und dergleichen ein PITA sind, und man ein umso schöneres Leben hat, je früher man ihnen den Garaus macht:

1
mv "/media/merlin/Debian\ 9.8" "/media/merlin/debian-9.8"

(Uppercase ist auch nervig, erfordert es doch immer zwei Anschläge, insbesondere am Namensanfang, wo sie gerne auftauchen, und für Tabcompletion unzugänglich.)

Leider sind Leerzeichen wie Malariafliegen - man bekommt sie ohne internationale Zusammenarbeit und scharfe, formale Eingriffe, nicht los, sondern muss immer wieder mal welche totschlagen. Im eigenen Wirkungsbereich kann man aber doch viel bewegen - außer man arbeitet viel mit anderen zusammen, die das anders sehen.

Kleiner_Kobold_2

(Themenstarter)
Avatar von Kleiner_Kobold_2

Anmeldungsdatum:
18. Januar 2019

Beiträge: 177

user_unknown Der Fehler liegt in der Wildcard *.ods Was kann ich da machen?

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17625

Wohnort: Berlin

Was oben schon geantwortet wurde.

Anführungsstriche maskieren Sonderzeichen, einfache und doppelte maskieren Leerzeichen, die sonst von der Shell als Trenner zwischen Zeichenketten interpretiert werden, die einfachen maskieren auch den Stern (was Du nicht willst - Stern kann aber ein legitimes, wenn auch idiotisches Zeichen in einem Dateinamen sein).

Einfache Anführungsstriche maskieren auch doppelte Anführungsstriche. Backslash maskiert auch einfache Anführungsstriche. Kann verworren werden, weswegen jeder Mann von Geschmack und jede Frau von Intelligenz alle Zeichen, die in Dateinamen Ärger machen können, auf das konservativste meidet. Modernität kann man auch anderweitig ausdrücken.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13219

user_unknown schrieb:

Du kannst auch Singlequotes nutzen, nur eben nicht ums Sternchen. Das sieht zwar falsch aus, aber ist dennoch richtig:

Genau!

Es bietet sich vielleicht auch an, die Option "-t" für den Zielordner zu verwenden:

1
sudo cp -u -r -t /home/merlin/Schreibtisch/Strom-Gas '/media/merlin/Debian 9.8/home/merlin/Schreibtisch/'*.ods

Leider sind Leerzeichen wie Malariafliegen - man bekommt sie ohne internationale Zusammenarbeit und scharfe, formale Eingriffe, nicht los, sondern muss immer wieder mal welche totschlagen. Im eigenen Wirkungsbereich kann man aber doch viel bewegen - außer man arbeitet viel mit anderen zusammen, die das anders sehen.

Ich halte bekanntlich mehr davon, Skripte so auszulegen, das sie mit Leer- und Sonderzeichen unfallfrei umgehen können - insbesondere, wenn sie mit Argumenten auf der Kommandozeile arbeiten.

Antworten |