
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 sed
Operation 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 inputFile
lautet /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