URL-адрес кодирует строку в терминале macOS или сценарии оболочки

Мне нужно, чтобы URL-адрес кодировал путь к файлу unix в терминале macOS или сценарии оболочки. так что с этим в качестве ввода:

"/Volumes/Macintosh HD/Music/1-01 デ ジタルライフ.mp3"

Я получаю это как вывод:

"file:///Volumes/Macintosh%20HD/Music/1-01%20%E3%83%86%E3%82%99%E3%82%B7%E3%82%99%E3%82%BF%E3%83%AB%E3%83%A9%E3%82%A4%E3%83%95.mp3"

в основном то же самое, что и перетаскивание указанного файла в окно браузера, а затем копирование его URL-адреса. как я могу этого добиться? Спасибо.

Вы можете use URI в perl?

Armali 27.01.2023 09:46

@Armali macOS предоставляет URI, но команда perl -mURI::Encode -e 1 ошибается Can't locate URI/Encode.pm ...

Fravadona 27.01.2023 21:42

Как насчет perl -e 'use URI;print "file://".URI->new("/Volumes/Macintosh HD/Music/1-01 デ ジタルライフ.mp3");'?

Armali 30.01.2023 16:11

@ Armali Я знал, что есть лучший способ, который отлично работает. если вы напишете это как ответ, я выберу его как правильный, спасибо!

MagistraNocte 31.01.2023 11:15
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
4
74
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вероятно, есть лучшие способы сделать это, но мне, наконец, удалось сделать это следующим образом:

printf %s "/Volumes/Macintosh HD/Music/1-01 デ ジタルライフ.mp3" |
curl -Gso /dev/null -w %{url_effective} --data-urlencode @- "" | #urlencoding
cut -c3- | #cut the "/?" at the beginning
sed 's=%2F=/=g' | #change "%2F" back to slash
sed 's=+=%20=g' | #replace "+" to urlencoded space (%20)
sed 's=^=file://=' #prepend "file://"

Результат:

"file:///Volumes/Macintosh%20HD/Music/1-01%20%E3%83%86%E3%82%99%E3%82%B7%E3%82%99%E3%82%BF%E3%83%AB%E3%83%A9%E3%82%A4%E3%83%95.mp3"
Ответ принят как подходящий

Мы можем use URI в perl, при этом автоматическое преобразование объекта URI в строку делает именно то, что нужно (за исключением file://, который можно просто добавить в начало):

perl -e 'use URI;print "file://".URI->new("/Volumes/Macintosh HD/Music/1-01 デ ジタルライフ.mp3");'

Другие вопросы по теме