Μετατροπή URI σε filename
Εισαγωγή (που δε χρειάζεται να διαβάσετε): Στο file manager Nautilus υπάρχει η δυνατότητα να ορίσει ο χρήστης δικά του scripts (executables κλπ) για αρχεία/φακέλους στα οποία πατάει δεξί κουμπί, τα οποία scripts μετά φαίνονται σε ειδικό υπομενού ("scripts").
Όταν το αρχείο είναι local, το σύστημα περνά στο script τις παραμέτρους ως $0, $1 κλπ. Μπορώ να βρώ αν χρειάζεται το target directory με το pwd, οπότε τελικά η πλήρης διαδρομή του αρχείου που με ενδιαφέρει είναι η "`pwd`$1".
Το πρόβλημα είναι ότι αυτό δε δουλεύει σε απομακρυσμένα αρχεία, πχ σε samba share. Εκ κατασκευής το nautilus δεν περνά καθόλου τις $0, $1 κλπ σε αυτή την περίπτωση. Αυτά που περνά (*) είναι τα:
NAUTILUS_SCRIPT_SELECTED_URIS: URIs delimited by \n (**)
NAUTILUS_SCRIPT_CURRENT_URI: Current URI
Οπότε, τελικά, αν έχω "το αρχείο μου" στο share και πατήσω δεξί κουμπί, μου γυρίζει κάτι σαν (***):
NAUTILUS_SCRIPT_SELECTED_URIS = smb://myServer/myShare/my%20folder/%CF%84%CE%BF%20%CE%B1%CF%81%CF%87%CE%B5%CE%AF%CE%B F%20%CE%BC%CE%BF%CF%85
NAUTILUS_SCRIPT_CURRENT_URI = smb://myServer/myShare/my%20folder
Το ερώτημα είναι: Πώς θα μετατρέψω αυτό το URI:
NAUTILUS_SCRIPT_SELECTED_URIS = smb://myServer/myShare/my%20folder/%CF%84%CE%BF%20%CE%B1%CF%81%CF%87%CE%B5%CE%AF%CE%B F%20%CE%BC%CE%BF%CF%85
στο "ανθρώπινο" filename:
"//myServer/myShare/my\ folder/το\ αρχείο μου"
(με ή χωρίς τα \ που απλώς κάνουν escape τα κενά)
Υπάρχει ο "χαζός" τρόπος να φτιάξω με το χέρι την αντιστοιχία από όλα τα %xx σε κανονικούς χαρακτήρες, πχ το:
properName=`echo "${NAUTILUS_SCRIPT_SELECTED_URIS}" | sed 's/%20/ /g'`
θα μετατρέψει όλα τα %20 σε κενά.
Υπάρχει κάτι έτοιμο που να το κάνει για όλα τα %xx;
(*) τις δίνει και για local αρχεία, απλά δε χρειάζονται
(**) ας θεωρήσουμε ότι περνάμε μόνο ένα, άρα η μεταβλητή θα έχει ακριβώς ένα 0x0A, στο τέλος
(***) επίσης περνά και μια μεταβλητή από την οποία καταλαβαίνουμε ότι το αρχείο είναι remote, αλλά δε μας απασχολεί εδώ
__________________
may you live in interesting times
|