Мне нужно, чтобы 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-адреса. как я могу этого добиться? Спасибо.
@Armali macOS предоставляет URI, но команда perl -mURI::Encode -e 1 ошибается Can't locate URI/Encode.pm ...
Как насчет perl -e 'use URI;print "file://".URI->new("/Volumes/Macintosh HD/Music/1-01 デ ジタルライフ.mp3");'?
@ Armali Я знал, что есть лучший способ, который отлично работает. если вы напишете это как ответ, я выберу его как правильный, спасибо!

Вероятно, есть лучшие способы сделать это, но мне, наконец, удалось сделать это следующим образом:
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");'
Вы можете
use URIвperl?