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

5

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

  

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

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

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

например

  

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

говорит

  

Нет такого файла или каталога

    
задан UAdapter 02.11.2011 в 13:57
источник

5 ответов

0

Чтобы удалить префикс 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
    
ответ дан lgarzo 02.11.2011 в 14:24
источник
6

Я не знаю никаких команд, которые конвертируют между файловыми 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
    
ответ дан geirha 06.11.2011 в 23:13
0

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

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

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

    
ответ дан Saran Krishnan 01.08.2013 в 19:32
0

Вы можете использовать это, если 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:// , используя только манипуляции с строкой Bash.

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

Функции:

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

Использование:

cat "$(norm_path file:///home/user/path/file)"
    
ответ дан minerz029 10.01.2014 в 22:22
0

Вы также можете использовать 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, расширение скобок и т. Д.).

    
ответ дан wroth 25.08.2016 в 16:41