Ich versuche, mehrere Dateien aus einem Shellscript in ein Verzeichnis zu kopieren. Diese Dateien enthalten alle Arten von "hässlichen" Zeichen, wie Leerzeichen, Klammern und was sonst nicht. Allerdings stecke ich fest, wenn es darum geht, diesen als zu entkommen bash
und cp
scheinen sehr seltsam damit umzugehen.
Hier ist das Szenario:
Wenn ich diesen Befehl in meiner Shell absetze, funktioniert das wie ein Zauber:
cp /somedir/a\ file.png /somedir/another\ file.png /someotherdir/
Beim Lesen der zu kopierenden Dateien aus einem String wird es jedoch plötzlich seltsam:
var="/somedir/a\ file.png /somedir/another\ file.png"
cp "$ var" / someotherdir /
Ergebnisse in cp: cannot stat 'a\\ file.png another\\ file.png': No such file or directory
Ich glaube, das liegt daran, dass ich die Variable als String gebe und cp
glaubt, es ist eine Datei, obwohl es mehrere Dateien ist. Wenn Sie denselben Befehl ausführen, ohne die Variable in Anführungszeichen zu setzen ( var="/somedir/a\ file.png /somedir/another\ file.png"; cp $var /someotherdir/
) Ich bekomme einen noch seltsameren Fehler:
cp: cannot stat 'a\\ file.png another\\ file.png': No such file or directory
cp: cannot stat 'file.png': No such file or directory
cp: cannot stat 'another\\': No such file or directory
cp: cannot stat 'file.png': No such file or directory
Es scheint meine Flucht völlig zu ignorieren. Was mache ich falsch?
BEARBEITEN :// Wie es scheint Liste der Dateien kopieren hat eine Antwort mit xargs
, aber ich frage mich immer noch, warum bash sich hier so komisch verhält.