Perché questa è una domanda stimolante
La domanda presenta alcune sfide:
nautilus non comunica direttamente dalla riga di comando, ad esempio per ottenere la directory attualmente attiva, né è possibile "inviare" la cartella attualmente aperta (-window) a un'altra directory dalla riga di comando.
- Nel percorso corrente, come richiesto tramite
"NAUTILUS_SCRIPT_CURRENT_URI", Nautilus non restituisce il percorso reale alla cartella corrente, ma "vede" il collegamento come se fosse una cartella effettiva.
La soluzione quindi è sporca come si arriva; dobbiamo trovare soluzioni alternative. Di seguito quattro opzioni per risolvere il problema.
1. fare clic con il tasto destro per salire di un livello
Per ottenere il percorso reale alla directory corrente, dobbiamo recuperare le informazioni dal collegamento. Possiamo farlo sia usando ls -lil link, che produrrà ad esempio:
lrwxrwxrwx 1 jacob jacob 35 jan 15 08:23 /home/jacob/Bureaublad/Flyer_st/Verwijzing naar Site_current -> /home/jacob/Bureaublad/Site_current
dove la sezione successiva ->è il vero percorso all'interno del collegamento simbolico o, usando python:
real = os.path.realpath("/path")
Usandolo in uno nautilusscript, possiamo indirettamente ottenere il vero percorso del file o della cartella corrente.
Quindi se abbiamo il percorso, come facciamo a far muovere il nautilo di un livello?
Ancora una volta, non possiamo risolverlo e tenere pulite le mani. Per spostarsi di un livello in alto, dobbiamo prima modificare un po 'il percorso trovato, da:
/path/to/a/folder
in
/path/to/a
quindi, usando xdotoolper simulare Ctrl+ L(la scorciatoia della GUI per inserire un percorso in una finestra di nautilus, poiché non esiste alcuna opzione cli per spostarsi in un'altra directory usando la finestra corrente ), e successivamente fare xclipincollare il percorso modificato + Enter, abbiamo una soluzione funzionante !
In pratica
Siamo in una cartella, aperta da un collegamento ("Collegamento a Telegram") sul mio desktop. La vera cartella è una sottocartella della mia Downloadscartella:

Quindi, se facciamo clic con il pulsante destro del mouse su uno dei file all'interno della cartella per eseguire lo script:

Automaticamente, viene inserito il percorso della directory superiore:

E, anche automaticamente, Returnviene premuto e spostiamo di una directory in alto:

Il copione
#!/usr/bin/env python3
import subprocess
import os
import time
def run(cmd):
subprocess.call(["/bin/bash", "-c", cmd])
current = os.getenv("NAUTILUS_SCRIPT_CURRENT_URI").replace("file://", "").replace("%20", " ")
real = os.path.realpath(current)
up = os.path.abspath(os.path.join(real, os.pardir))
run("xdotool key Control_L+l")
run("printf '"+up+"' | xclip -selection clipboard")
run("xdotool key Control_L+v")
# confirm by virtually press Return
time.sleep(0.1)
run("xdotool key Return")
Come impostare
Lo script ha bisogno di entrambi xdotoole xclip:
sudo apt-get install xdotool xclip
creare, se non esiste già, la directory
~/.local/share/nautilus/scripts
Copia lo script sopra in un file vuoto, salvalo come level_up(senza estensione) ~/.local/share/nautilus/scriptse rendilo eseguibile
- Potrebbe essere necessario disconnettersi e riconnettersi.
Ora dovresti essere in grado di eseguire lo script facendo clic con il pulsante destro del mouse su un file (qualsiasi)> script> level_up:

[ EDIT ] Ho cambiato lo script qui sopra per incollare il percorso nella nautilusfinestra, invece di fare xdotool il tipo di esso. Deve needs xclipessere installato, ma è un grande miglioramento, specialmente su percorsi molto lunghi.
2. In alternativa, aprire una nuova finestra di nautilus nella directory superiore
Si potrebbe evitare di usare xdotool, aprendo lo script una nuova finestra di nautilus, nella directory dei genitori. Lo script sarebbe quindi ancora più breve:
#!/usr/bin/env python3
import subprocess
import os
def run(cmd):
subprocess.call(cmd)
current = os.getenv("NAUTILUS_SCRIPT_CURRENT_URI").replace("file://", "").replace("%20", " ")
real = os.path.realpath(current)
up = real[:real.rfind("/")]
subprocess.Popen(["nautilus", up])
In questo caso, non è necessario installarlo xdotool. Potremmo anche estendere lo script chiudendo la finestra originale e posizionando la nuova finestra esattamente nella stessa posizione (e dimensione).
Il rovescio della medaglia è che la storia della finestra originale si perde in questo modo.
3. Una soluzione aggiuntiva: modo alternativo di creare (automaticamente) collegamenti
Non pertinente ai collegamenti esistenti, ma quando utilizzato dalla GUI, .desktoppotrebbe essere utile uno script nautilus per creare automaticamente file eseguibili con il clic destro:
fare clic con il tasto destro sulla directory per creare un collegamento (comportandosi come un collegamento)

A differenza dei collegamenti simbolici, questi collegamenti portano alla cartella effettiva, senza comportarsi come una cartella stessa:

Il copione
#!/usr/bin/env python3
import subprocess
import os
current = os.getenv(
"NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"
).replace("file://", "").replace("%20", " ").strip()
if os.path.isdir(current):
parent = os.path.abspath(os.path.join(current, os.pardir))
fldr_path = '"'+current+'"'
folder = current[current.rfind("/")+1:]
linkfilename = parent+"/"+folder+"link.desktop"
linkdata = [
"[Desktop Entry]",
"Type=Application",
"Name=Link to -> "+folder,
"Icon=folder",
"Exec=nautilus "+fldr_path,
]
with open(linkfilename, "wt") as wt:
for l in linkdata:
wt.write(l+"\n")
command = "chmod +x "+"'"+linkfilename+"'"
subprocess.Popen(["/bin/bash", "-c", command])
Come usare
- Copia lo script in un file vuoto, salvalo come
make_link(senza estensione) ~/.local/share/nautilus/scriptse rendilo eseguibile
- Usa lo script selezionandolo come opzione del tasto destro come nella prima immagine. Un
.desktopfile eseguibile verrà creato nella stessa directory, spostarlo altrove se necessario; il percorso collegato è assoluto.
Dai al link un'icona distintiva
Potresti dare al link alternativo un'icona distintiva. Se cerchi /usr/share/icons"cartella" nella directory, vengono visualizzate numerose opzioni valide.
Se nello script la riga "Icon=folder",è sostituita da Icon=stock_folder-copy,(usa il nome dell'icona senza estensione), il risultato sul mio sistema è:

Ovviamente puoi usare anche la tua icona personalizzata, ma se usi percorsi completi (non usare ~), dovresti includere l'estensione dell'icona.
4. Passare alla directory superiore con un tasto di scelta rapida
Probabilmente l'opzione più conveniente; con la finestra nautilus di fronte, premere un tasto di scelta rapida per spostarsi di una directory verso l'alto.
Il copione
#!/usr/bin/env python3
import subprocess
import time
import os
def get(cmd):
return subprocess.check_output(cmd).decode("utf-8").strip()
def run(cmd):
subprocess.call(["/bin/bash", "-c", cmd])
# get information on the active window
front = get(["xprop", "-id", get(["xdotool", "getactivewindow"])])
# (only) if it is a "normal" nautilus window, take action
if 'WM_CLASS(STRING) = "nautilus", "Nautilus"' in front:
# "virtually" press Ctrl + l
run("xdotool key Control_L+l"); time.sleep(0.05)
# copy the current path, calculate the "real" parent directory
real = os.path.realpath(get(["xclip", "-o"]))
up = os.path.abspath(os.path.join(real, os.pardir))
time.sleep(0.1)
# enter the superior directory
run("printf '"+up+"' | xclip -selection clipboard")
run("xdotool key Control_L+v")
# confirm by virtually press Return
time.sleep(0.1)
run("xdotool key Return")
Usare
Per questa soluzione, entrambi xclipe xdotooldevono essere sul tuo sistema.
sudo apt-get install xdodool xclip
Copia lo script in un file vuoto, salvalo come level_up.py(ovunque).
Aggiungilo a un tasto di scelta rapida: scegli: Impostazioni di sistema> "Tastiera"> "Scorciatoie"> "Scorciatoie personalizzate". Fai clic su "+" e aggiungi il comando:
python3 /path/to/level_up.py
NB Le opzioni di scelta rapida sono un po 'limitate in questo caso, poiché lo script stesso simuleràCtrl+LeCtrl+Alt+Lti farà disconnettere ...Ctrl+ ha\funzionato bene sul mio sistema.
Spiegazione
Questo script simula anche Ctrl+ L, ma invece di usare nautilus ' "NAUTILUS_SCRIPT_CURRENT_URI", utilizza xclipper copiare il percorso selezionato automaticamente nella finestra di nautilus. Come l'opzione 1, lo script calcola quindi il percorso reale e deriva la directory superiore.
Questa opzione potrebbe essere utile se si preferisce che la tastiera utilizzi il tasto destro.