9 votes

Utilisez msysgit/"Git for Windows" pour naviguer dans les raccourcis Windows?

J'utilise msysgit sur Windows pour utiliser git, mais je veux souvent naviguer à travers un raccourci de style Windows *.lnk. Je gère généralement ma structure de fichiers à travers l'explorateur de Windows, donc utiliser un autre type de raccourci (comme créer un lien dur ou un lien symbolique dans git) n'est pas réalisable. Comment pourrais-je naviguer à travers ce type de raccourci?

Par exemple:

PCUser@PCName ~
$ cd Desktop

PCUser@PCName ~/Desktop
$ ls
Scripts.lnk

PCUser@PCName ~/Desktop
$ cd Scripts.lnk
sh.exe": cd: Scripts.lnk: Not a directory

Est-il possible de changer ce comportement, afin qu'au lieu d'obtenir une erreur, il aille simplement à l'emplacement du répertoire? Alternativement, y a-t-il une commande pour obtenir le chemin dans un fichier *.lnk?

ÉDITION: J'ai entendu dire que l'inverse de ceci existe pour cygwin, permettant de créer un lien symbolique qui fonctionne avec l'explorateur.

7voto

iglvzx Points 23001

*ahem*

Tout d'abord, compiler le script AutoHotkey suivant:

FileGetShortcut, %1%, shortcut_target
FileAppend, %shortcut_target%, *
ExitApp

Placez le fichier .EXE dans un répertoire %PATH%. Je l'ai nommé follow.exe.

Maintenant, vous pouvez suivre efficacement un fichier .LNK Windows dans votre répertoire de travail en utilisant la syntaxe suivante:

cd `follow Shortcut.lnk`

où la cible de Shortcut.lnk est un répertoire valide.


Démonstration:

raccourci

git bash


Une fois que vous avez configuré votre follow.exe, vous pouvez ajouter la fonction shell suivante à votre fichier ~/.bashrc pour simplifier davantage la syntaxe. _Merci, Daniel!_

function cd
{
    if [[ ".lnk" = "${1:(-4)}" && -f "$1" ]] ;
        then builtin cd "$( follow "$1" )" ;
    else builtin cd "$1" ;
    fi
}

Maintenant, vous pouvez suivre les fichiers .LNK en utilisant simplement cd!

cd Shortcut.lnk

Démonstration:

cd

3voto

brettkelly Points 690

Il semble que ce ne soit pas possible pour le moment, et l'approche recommandée est d'utiliser l'utilitaire Junction:

À propos de la création de liens symboliques sur msys

Mise à jour :

Merci iglvzx pour votre réponse.

Cependant, dans mon cas, parfois l'auto-complétion bash ajoute un / après le raccourci, comme cd /f/downloads/scripts.lnk/, donc j'en profite pour jouer avec le scripting bash et ajuster votre script, en vérifiant également les raccourcis non acceptables (cassés ou pointant vers des fichiers) :

cd() {

    shopt -s nocasematch

    if [[ -z "$1" ]];
        then
            echo Erreur : opérande manquant;
            return 1;
    fi;

    if [[ "$1" == "/" ]];
        then
            destination=$1;
        else
            destination=${1%/};
    fi;

    extension=${destination##*.}

    if [[ -f "$destination" && $extension == "lnk" ]];
        then

            finaldestination=`follow "$destination"`;

            if [[ -z "$finaldestination" ]];
                then
                    echo Erreur : destination invalide;
                    return 2;
            fi;

            if [[ -f "$finaldestination" ]];
                then
                    echo Erreur : la destination est un fichier;
                    return 3;
            fi;

            builtin cd "$finaldestination";

        else
            builtin cd "$destination";
    fi;
}

1voto

bandi Points 2426

Ouvrir des raccourcis depuis msys est possible avec cmd via le drapeau /C:

cmd //C "C:\Shortcut.lnk"

Si c'est un raccourci vers un dossier, il sera ouvert. Le slash doit être échappé pour que msys ne convertisse pas /C en C:\.

Les chemins relatifs fonctionnent également, et les guillemets ne sont pas nécessaires pour les chemins simples. Si le fichier lnk est dans le dossier actuel:

cmd //C Shortcut.lnk

1voto

mikeLundquist Points 111

Si vous créez un lien symbolique (en utilisant mklink /D depuis cmd avec des privilèges d'administration) plutôt qu'un raccourci, git bash peut le suivre avec cd -P .

0voto

Bernie Lenz Points 101

Wow, approche impressionnante iglvzx ! Je recommande une petite amélioration à votre script ~/.bashrc afin qu'un simple cd sans argument change toujours vers le répertoire personnel de l'utilisateur.

function cd
{
    if [[ ".lnk" = "${1:(-4)}" && -f "$1" ]] ;
        then builtin cd "$( follow "$1" )" ;
    elif [[ -z "$1" ]] ;
        then builtin cd ;
    else 
        builtin cd "$1" ;
    fi
}

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X