Nautilus:シンボリックリンク経由でディレクトリにアクセスしましたが、ターゲットディレクトリ階層を1レベル上に移動できません


14

「リンクを作成」オプションを使用してショートカットを作成しました。このショートカットのフォルダーに入ると、その上のフォルダーが表示されないため、簡単に移動できません。

GUIで1つのフォルダーを移動する方法はありますか?おそらくホットキーですか?(cd ..今回はできません^ __ ^)。

ここに画像の説明を入力してください


たとえばWindowsでは、実際に説明した方法でナビゲートできます。これを説明するWin10イメージを次に示します。

ここに画像の説明を入力してください


Backspaceキーを試しましたか?
PenguinCSC

行われなければならないのにNautilusで以下3.16以上、それはそうでなければ試すソースを経由して>(パッチまたは利用でき14.04のためのPPAビルド)を再構築オウムガイツールバーに親のボタンを簡単に追加することもできますAlt+up key
ダグ

Alt + Upを使用すると、リンクのリンク先からデスクトップに移動できます...悲しいことに、いいえ:\ここに誰かが適切な接続を持っている場合、開発チームに直接これを提供できますか?私のデータは、多くの人々 (私は推測)を通過する必要がなくて、私は本当に、それを直接提供することはできませんので...非常に新しいました
JohnDoea

ああ-意味がわかります。ジェイコブのソリューションを試すか、自分でリンクを作成することもできます。現在のリンクはディレクトリとして表示されるため、上がディレクトリになります。リンクは、通常デスクトップにあります。実行可能な.desktopファイルを使用してリンクを作成する場合、その「リンク」を使用した後のナビゲーションは正常になります。
ダグ

同じ質問はここに askubuntu.com/questions/713397/show-full-path-for-links(解決した場合、重複などの他のマークする)
user.dz

回答:


17

なぜこれが難しい質問なのか

この質問にはいくつかの課題があります。

  • nautilus たとえば、現在アクティブなディレクトリを取得するためにコマンドラインから直接通信したり、コマンドラインから現在開いているフォルダ(-window)を別のディレクトリに「送信」することはできません。
  • を介して要求された現在のパスでは"NAUTILUS_SCRIPT_CURRENT_URI"、Nautilusは現在のフォルダーへの実際のパスを返しませんが、実際のフォルダーであるかのようにリンクを「表示」します。

したがって、解決策は取得するのと同じくらい汚れています。回避策を見つける必要があります。問題を解決するための4つのオプションの下。

1.右クリックして1レベル上に移動します

現在のディレクトリへの実際のパスを取得するには、リンクから情報を取得する必要があります。次のls -lように出力するリンク上で使用することにより、それを行うことができます。

lrwxrwxrwx 1 jacob jacob 35 jan 15 08:23 /home/jacob/Bureaublad/Flyer_st/Verwijzing naar Site_current -> /home/jacob/Bureaublad/Site_current

セクションの後には、どこ->、実際のシンボリックリンク内のパス、または、使用してpython

real = os.path.realpath("/path")

これをnautilusスクリプトで使用すると、現在のファイルまたはフォルダーへの実際のパスを間接的に取得できます。

次に、パスがある場合、どのようにノーチラスを1レベル上に移動させますか?

繰り返しますが、これ解決することはできず、手を清潔に保つことはできません。1レベル上に移動するには、最初に見つかったパスを少し編集します。

/path/to/a/folder

/path/to/a

次に、+ xdotoolをシミュレートして(現在のウィンドウを使用して別のディレクトリに移動するcliオプションがないため、nautilusウィンドウにパスを挿入するGUIショートカット)を使用し、続いて編集されたパスを貼り付けます+ 、作業ソリューション!CtrlLxclipEnter

実際には

  1. 私たちは、デスクトップ上のリンク(「テレグラムへのリンク」)から開かれたフォルダーにいます。実際のフォルダは、私のサブフォルダであるDownloadsフォルダ:

    ここに画像の説明を入力してください

  2. 次に、フォルダー内のファイルのいずれかを右クリックして、スクリプトを実行します。

    ここに画像の説明を入力してください

  3. 自動的に、上位ディレクトリへのパスが挿入されます。

    ここに画像の説明を入力してください

  4. また、自動的にReturn押され、1つ上のディレクトリレベルに移動します。

    ここに画像の説明を入力してください

スクリプト

#!/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")

設定方法

  1. このスクリプトは、両方を必要とするxdotoolxclip

    sudo apt-get install xdotool xclip
    
  2. ディレクトリを作成します(まだ存在しない場合)。

    ~/.local/share/nautilus/scripts
    
  3. 上記のスクリプトを空のファイルにコピーし、level_up(拡張子なし)として保存し~/.local/share/nautilus/scripts実行可能にします

  4. ログアウトしてから再度ログインする必要がある場合があります。
  5. これで、ファイル(任意)>スクリプト> level_upを右クリックてスクリプトを実行できるようになります。

    ここに画像の説明を入力してください


[ 編集 ]上記のスクリプトを変更して、パスを入力する代わりにウィンドウに貼り付けました。それはインストールするが、それは特に非常に長いパス上の主要な改善、です。nautilusxdotool needs xclip


2.または、上位ディレクトリで新しいnautilusウィンドウを開きます

親のディレクトリにあるスクリプトで新しい nautilusウィンドウを開くことにより、の使用を避けることができます。この場合、スクリプトはさらに短くなります。xdotool

#!/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])

この場合、をインストールする必要はありませんxdotool。元のウィンドウを閉じて、新しいウィンドウをまったく同じ位置(&サイズ)に配置することで、スクリプトを拡張することもできます。

欠点は、元のウィンドウの履歴がこの方法で失われることです。

3.追加のソリューション:(自動的に)リンクを作成する代替方法

既存のリンクには関係ありませんが、GUIから使用する.desktop場合、右クリックで実行可能ファイルを自動的に作成するnautilusスクリプトが役立つ場合があります。

ディレクトリを右クリックしてショートカットを作成します(リンクとして動作)

ここに画像の説明を入力してください

シンボリックリンクとは異なり、これらのリンクはフォルダー自体として動作することなく、実際のフォルダーに移動します。

ここに画像の説明を入力してください

スクリプト

#!/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])

使い方

  1. スクリプトを空のファイルにコピーし、make_link(拡張子なし)として保存し~/.local/share/nautilus/scripts実行可能にします
  2. 最初の画像のように、スクリプトを右クリックオプションとして選択して使用します。実行可能.desktopファイルは同じディレクトリに作成され、必要に応じて別の場所に移動します。リンクされたパスは絶対パスです。

リンクに目立つアイコンを付ける

代替リンクに際立ったアイコンを付けることができます。ディレクトリ内/usr/share/iconsで「フォルダ」を検索すると、多数の有効なオプションがポップアップ表示されます。

スクリプト内で行"Icon=folder",Icon=stock_folder-copy,(拡張子のないアイコン名を使用して)に置き換えられた場合、システム上の結果は次のようになります。

ここに画像の説明を入力してください

もちろん、独自のカスタムアイコンも使用できますが、フルパスを使用する場合(を使用しない~でください)、アイコンの拡張子を含める必要があります。

4.ショートカットキーを使用して上位ディレクトリに移動する

おそらく最も便利なオプションです。nautilusウィンドウが前面にある状態で、ショートカットキーを押して1つのディレクトリを上に移動します。

スクリプト

#!/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")

使用するには

  1. このソリューションでは、両方xclipxdotoolシステムに存在する必要があります。

    sudo apt-get install xdodool xclip
    
  2. スクリプトを空のファイルにコピーし、level_up.py(どこでも)として保存します。

  3. ショートカットキーに追加します。[システム設定]> [キーボード]> [ショートカット]> [カスタムショートカット]を選択します。「+」をクリックして、コマンドを追加します。

    python3 /path/to/level_up.py
    

:この場合、ショートカットオプションは少し制限されます。スクリプト自体Ctrl+をシミュレートしLCtrl+Alt+Lがログアウトするためです...Ctrl+\私のシステムでは正常に機能しました。

説明

このスクリプトはCtrl+ もシミュレートしますが、Lnautilus 'を使用する代わりに、nautilusウィンドウで自動的に選択されたパスをコピーする"NAUTILUS_SCRIPT_CURRENT_URI"ために使用xclipします。オプション1と同様に、スクリプトは実際のパスを計算し、上位のディレクトリを取得します。

このオプションは、キーボードで右クリックを使用する場合に便利です。


3

または、xdotoolパッケージが追加されたUbuntu 14.04、nautilus 3.10-1の場合は、.local/share/nautilus/scripts/updirtree ファイルで次を使用するだけです。

# In nautilus, the pwd is the actual, not the link path
xdotool key ctrl-l
xdotool type "$(dirname $(pwd))" "
"

最後の引用には、改行またはリターン(0x0a)を含める必要があります。pwdNautilusの中から、端末bashの/から実行した場合とは異なる結果を生成する-実際のパスではなく、リンクを使用してパスを返します。


私はそれが意味をなさないこと、文書化されていないことに同意し、どのような実行環境がコードを実行しているかを把握することさえできません(その結果を生成するシェルは見つかりません)が、動作します。これはハックです。そのため、ノーチラスのバージョンを含めました。誰がそれがいつまで機能するかを知っていますか?次のnautilusアップグレード(または不明なインタープリター)で壊れる可能性がありますが、私にとっては、マウントされた場所へのリンク、ディレクトリツリー内の場所へのリンク、またはディレクトリツリー内の単なる場所で動作します。


Ubuntu 15.10を使用しています...似たようなコードで動作しますか?
-JohnDoea

1
これは意味 $(pwd)がありません。nautilusではなく、シェルの作業ディレクトリです。参照help.ubuntu.com/community/NautilusScriptsHowto
ジェイコブVlijm

@benos確認、15.10で動作します
-user.dz

@JacobVlijm、それはうまく機能し、合理的であるように思えます、nautilusは現在のディレクトリでスクリプトを実行します。
user.dz

1
また、@ Sneetsherは驚いたことに動作します。ただし、非常に長いパスで使用すると、タイミングの問題が発生します。パスの長さに応じて、ブレークを設定する必要があります。それ以外のタイプのパスは壊れているように見えます。最初は、(任意の)ブレークで修正しました。最新バージョンでは、パスの長さの影響を受けないパスをxclip 貼り付けました。
ジェイコブVlijm

2

完全な修正ですが、このコミットを元に戻すことでソースを再構築する必要があります:

diff --git a/src/nautilus-mime-actions.c b/src/nautilus-mime-actions.c
index ca1f0ac..0b363b4 100644
--- a/src/nautilus-mime-actions.c
+++ b/src/nautilus-mime-actions.c
@@ -2029,21 +2029,13 @@ activate_activation_uris_ready_callback (GList *files_ignore,

    /* Convert the files to the actual activation uri files */
    for (l = parameters->locations; l != NULL; l = l->next) {
-       char *uri = NULL;
-
+       char *uri;
        location = l->data;

        /* We want the file for the activation URI since we care
         * about the attributes for that, not for the original file.
         */
-       if (nautilus_file_is_symbolic_link (location->file)) {
-           uri = nautilus_file_get_symbolic_link_target_uri (location->file);
-       }
-
-       if (uri == NULL) {
-           uri = nautilus_file_get_activation_uri (location->file);
-       }
-
+       uri = nautilus_file_get_activation_uri (location->file);
        if (uri != NULL) {
            launch_location_update_from_uri (location, uri);
        }

ビルド手順:

  1. ソースをダウンロード:

    apt-get source nautilus
    
  2. ビルドの依存関係をダウンロードする

    sudo apt-get build-dep nautilus
    
  3. 上記のパッチから必要な変更を行います

    編集 src/nautilus-mime-actions.c

    /* Convert the files to the actual activation uri files */
    for (l = parameters->locations; l != NULL; l = l->next) {
        char *uri = NULL;
        location = l->data;
    
        /* We want the file for the activation URI since we care
         * about the attributes for that, not for the original file.
         */
        if (nautilus_file_is_symbolic_link (location->file)) {
            uri = nautilus_file_get_symbolic_link_target_uri (location->file);
        }
    
        if (uri == NULL) {
            uri = nautilus_file_get_activation_uri (location->file);
        }
    
        if (uri != NULL) {
            launch_location_update_from_uri (location, uri);
        }
    
  4. ビルドしてインストールする

    autoreconf
    ./configure
    make
    

    インストールせずにテストするには

    sudo killall -r "[\w]*nautilus"
    ./src/nautilus
    

    インストールする

    sudo make install
    

これにより、nautilusはリンクをターゲットパスに解決します。ところで、これはしばらく前にバグとして報告されました。これが機能だと思う場合は、別のバグレポートを送信して、スイッチの設定または特定のショートカットを要求してください。

参照: Nautilusがシンボリックリンクを逆参照しないようにするにはどうすればよいですか?[閉まっている]


問題は、nautilusの現在のバージョンを固定するか、更新のたびに手順を繰り返す必要があることです。
ジェイコブVlijm

1
@JacobVlijm、うん、debパッケージをビルドするとそうなります。しかし、私は、それがインストールされるわけではありませんでした/usr/local/bin/システムは常に変更されたコピーを実行するように記載されているように、$PATH
user.dz
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.