Kopieren von Dateien aus Verzeichnissen mit Leerzeichen im Namen

Kopieren von Dateien aus Verzeichnissen mit Leerzeichen im Namen

Das ist, was ich versucht habe.

inputFile=$(zenity --file-selection --title "Test" --text "Please select the file for analysis." | sed -e "s/ /\\\ /g")

Ich habe die sedOperation ausgeführt, um Leerzeichen durch ein \und ein Leerzeichen zu ersetzen, damit der Kopierbefehl funktioniert. Dann habe ich aus der Zenity-Dateiauswahl-GUI eine Datei ausgewählt, sodass der darin enthaltene Wert inputFilelautet /home/username/Documents/Learning\ and\ Development/testfile.txt.

Wenn ich nun versuche, diese Datei in mein Arbeitsverzeichnis zu kopieren mit

cp $inputFile .

Es wird immer noch der Fehler zurückgegeben.

cp: cannot stat ‘/home/user/Documents/Learning\\’: No such file or directory
cp: cannot stat ‘and\\’: No such file or directory
cp: cannot stat ‘Development/WhatsApp.apk’: No such file or directory

Gibt es eine Möglichkeit, dies zu umgehen? Tatsächlich schreibe ich gerade ein Programm. Daher möchte ich den Benutzern nicht sagen, dass sie ihre Ordnernamen umbenennen sollen, um Leerzeichen zu vermeiden.

Antwort1

Der Trick ist ganz einfach: Setzen Sie die Zeichenfolge in doppelte Anführungszeichen:

cp "$inputFile" /destination/

Das Einschließen von Zeichen in doppelte Anführungszeichen ('"') behält den Literalwert aller Zeichen innerhalb der Anführungszeichen bei, mit Ausnahme von '$', '`', '\'. Weitere Informationen:http://www.gnu.org/software/bash/manual/html_node/Double-Quotes.html

Antwort2

Sie können * hinzufügen, wo das Leerzeichen erschien und die Kopie kann wie folgt erfolgen

 cp  /home/user/users*tst.txt  /home/user/Downloads

wo Sie die tst.txt-Datei des Benutzers vom Home-Ordner in den Download-Ordner kopieren möchten

verwandte Informationen