Intereting Posts
Изменение вывода процесса на ssh-терминал Диск не содержит допустимую таблицу разделов – записи таблицы разделов не в порядке диска Нет доступа к Интернету в Интернете при настройке этих правил iptables Удержание Ubuntu только для поиска установленных приложений Как убить поток ядра? И я действительно хочу это сделать? Как управлять фронтом и задним громкостью независимо с клонированным стереосигналом Как выполнить команду оболочки в Vim и получить результат, напечатанный ниже? Сколько данных необходимо загрузить для обновления до новой версии Ubuntu? Как отключить флоппи-дисковод? Могу ли я установить GNU Hurd в Ubuntu? Как вы исправляете неудовлетворенную зависимость при установке Cinnamon на Ubuntu 14.04? Могу ли я принудительно выводить сигнал VGA, даже когда xrandr показывает «отключен»? Как разрешить медленную и изменчивую производительность в виртуальном боксе? Расширение оболочки GNOME для разных приложений в Dash по рабочему пространству? Auth удалось.

Как создать файл поддержки скрипта: /// нотация?

Когда я копирую любой файл и вставляю его в консоль или редактирование текста, он передается как

Файл: /// дом / пользователь / путь / файл

когда я передаю его сценарию, он не найден

Каков самый простой способ конвертировать это в обычный путь linux или каким-то образом заставить скрипт поддерживать его?

например

cat file: /// home / user / path / file

говорит

Данный файл или каталог отсутствует

Чтобы удалить file:// префикс из URL-адреса, вы можете использовать sed :

 echo "file:///home/user/path/file" | sed "s/^file:\/\///g" 

Что выше:

  • Отображает URL-адрес стандартного вывода (поэтому его можно изменить с помощью sed)
  • Заменяет все вхождения file:// в любой строке, начинающейся с file:// ничем. Это эффективно удаляет file:// из URL-адреса, остающегося только /home/user/path/file

Чтобы использовать это из скрипта, вы можете попробовать следующее:

 cat $(echo "file:///home/user/path/file" | sed "s/^file:\/\///g") 

Теперь сообщение об ошибке:

 cat: /home/user/path/file: No such file or directory 

(Обратите внимание, что это ссылка на правильное имя файла вместо URL-адреса.)

Было бы гораздо чище хранить преобразованное имя файла в переменной оболочки и использовать его впоследствии.

 MYFILE=$(echo "file:///home/user/path/file" | sed "s/^file:\/\///g") cat $MYFILE 

Я не знаю никаких команд, которые конвертируют между файловыми urls и файловыми путями, но вы можете конвертировать с помощью python или любого другого языка с привязками к gio. Например:

 $ python -c 'import gio,sys; print(gio.File(sys.argv[1]).get_path())' file:///home/user/path/file%20with%20spaces /home/user/path/file with spaces 

Я считаю, что вы можете это сделать, это сам баш. Попробуйте следующее

 echo "file:///home/user/path/file" | cut -d'/' -f3- /home/user/path/file 

Он будет делиться до файла: // а остальное будет отображаться на терминале.

Вы можете использовать это, предполагая, что file_path содержит путь:

 #!/bin/bash file_path='file:///home/me/Desktop/path test' file_path="${file_path#file://}" echo "${file_path}" 

который печатает /home/me/Desktop/path test . Это позволяет работать с file:// или без него file:// , используя только манипуляции с строкой Bash.


Вы можете добавить это к функции (в .bashrc ) для удобства использования:

Функция:

 norm_path() { echo "${@#file://}" } 

Применение:

 cat "$(norm_path file:///home/user/path/file)" 

Вы также можете использовать urlencode ( sudo apt-get gridsite-clients ):

 $ echo "$(urlencode -d "file:///folder/with%20spaces")" file:///folder/with spaces $ echo "$(urlencode -d "file:///folder/with%20spaces"|cut -c 8-)" /folder/with spaces 

Если вы не нуждаетесь в шестнадцатеричной поддержке, вы можете просто использовать cut -c 8- . Кроме того, вы можете использовать urlencode с любым другим способом удаления file:// (sed, расширение расширений и т. Д.).