
Вот что я попробовал.
inputFile=$(zenity --file-selection --title "Test" --text "Please select the file for analysis." | sed -e "s/ /\\\ /g")
Я выполнил sed
операцию по замене пробелов на a \
и a пробел, чтобы команда копирования заработала. Затем из графического интерфейса выбора файлов Zenity я выбрал файл, так что значение внутри inputFile
было /home/username/Documents/Learning\ and\ Development/testfile.txt
.
Теперь, когда я пытаюсь скопировать этот файл в свой рабочий каталог с помощью
cp $inputFile .
Но все равно возвращает ошибку,
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
Есть ли способ обойти это? На самом деле я пишу программу. Поэтому я не хочу говорить пользователям, чтобы они переименовывали свои папки, чтобы избежать пробелов.
решение1
Вы можете легко сделать это, заключив в двойные кавычки:
cp "$inputFile" /destination/
Заключение символов в двойные кавычки ('"') сохраняет буквальное значение всех символов внутри кавычек, за исключением '$', '`', '\', Подробнее:http://www.gnu.org/software/bash/manual/html_node/Double-Quotes.html
решение2
вы можете добавить * там, где появился пробел, и копирование можно сделать так:
cp /home/user/users*tst.txt /home/user/Downloads
куда вы хотите скопировать пользовательский tst.txt в папку «Загрузки» из домашней папки