แปลงพา ธ ไฟล์เป็น URI ใน bash


11

ฉันจะแปลงพา ธ ไฟล์เป็น URI ในบรรทัดคำสั่งได้อย่างไร

ตัวอย่าง :

/home/MHC/directory with spaces and ümläuts

ถึง

file:///home/MHC/directory%20with%20spaces%20and%20%C3%BCml%C3%A4uts


คำตอบ:


5

วิธีหนึ่งในการทำเช่นนี้คือการใช้urlencode(ติดตั้งบน Ubuntu ผ่านsudo apt-get install gridsite-clients)

urlencode -m "$filepath"

จะแปลงเส้นทางเป็น URI ส่วน "file: //" ของ URI จะถูกละทิ้ง แต่คุณสามารถเพิ่มได้อย่างง่ายดายผ่าน bash one-liner:

uri=$(urlencode -m "$1"); echo "file://$uri"

หรือโดยตรง

echo "file://$(urlencode -m "$1")"

หรือ

echo -n file://; urlencode -m "$1"

ขอบคุณ Michael Kjörlingมากสำหรับการอ้างอิง!


อย่าลืมคำพูด! คุณอาจต้องการencodeduri=$(urlencode -m "$uri") ด้วย$uriเครื่องหมายคำพูดคู่!
gniourf_gniourf

@gniourf_gniourf ขอขอบคุณคุณแก้ไขโค้ดให้ถูกต้อง
Glutanimate

4

คุณยังสามารถใช้ไฟล์ Perl โมดูลURI ::ได้โดยตรงจากบรรทัดคำสั่ง:

$ path="/home/MHC/directory with spaces and ümläuts"
$ echo $path | perl -MURI::file -e 'print URI::file->new(<STDIN>)."\n"'
file:///home/MHC/directory%20with%20spaces%20and%20%C3%BCml%C3%A4uts
$

1
สามารถย่อให้สั้นลงecho $path | perl -MURI::file -E 'say URI::file->new(<>)'ด้วย Perl 5.10 (ตั้งแต่ปี 2550) หรือใหม่กว่า
Daniel Böhmer

2

บน CentOS ไม่จำเป็นต้องมีการพึ่งพาเพิ่มเติม:

$ python -c "import urllib;print urllib.quote(raw_input())" <<< "$my_url"

ด้วยpathlibโมดูลมันสามารถทำได้ผ่านpython -c 'import sys,pathlib; print(pathlib.Path(sys.argv[1]).resolve().as_uri())' "$my_url"
umi

pathlibมีเฉพาะใน Python 3 ซึ่งไม่ได้ติดตั้งไว้บน CentOS เป็นค่าเริ่มต้น
Rockallite
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.