Когда я копирую любой файл и вставляю его в консоли или тексте editos, он передается как
file:///home/user/path/file
то, когда я передаю его для сценариев его, не найдено
Что самый легкий путь состоит в том, чтобы преобразовать это в нормальный путь Linux или так или иначе заставить сценарий поддерживать его?
например,
кошка file:///home/user/path/file
говорит
Никакой такой файл или каталог
Я не знаю ни о каких командах, которые преобразовывают между URL файла и путями к файлам, но можно преобразовать с 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
Вы можете использовать это, предполагая, что 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)"
Вы также можете использовать 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, скобка и т. Д.)
Чтобы удалить префикс file://
из URL-адреса, вы можете использовать sed :
echo "file:///home/user/path/file" | sed "s/^file:\/\///g"
Что делает вышеуказанное:
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
Я верю, что ты можешь сделать это сам Bash. Попробуйте выполнить следующее:
echo "file:///home/user/path/file" | cut -d'/' -f3-
/home/user/path/file
Он будет ограничен до файла: //
, а остальные будут отображаться на терминале.