Use msysgit / “Git for Windows” para navegar pelos atalhos do Windows?

6

Eu uso o msysgit no Windows para usar o git, mas muitas vezes eu quero navegar pelo atalho *.lnk no estilo do Windows. Eu normalmente gerencio minha estrutura de arquivos através do Windows 'Explorer, portanto, usar um tipo diferente de atalho (como criar hard ou soft link no git) não é viável. Como eu navegaria nesse tipo de atalho?

Por exemplo:

PCUser@PCName ~
$ cd Desktop

PCUser@PCName ~/Desktop
$ ls
Scripts.lnk

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

É possível alterar esse comportamento para que, em vez de receber um erro, ele simplesmente vá até o local do diretório? Como alternativa, existe um comando para obter o caminho em um arquivo *.lnk ?

EDITAR : Ouvi dizer que existe o inverso disso a> para o cygwin, permitindo que você crie um link simbólico que funcione com o explorador.

    
por Darthfett 04.04.2012 / 19:03

5 respostas

5

* ahem *

Primeiro, compile as seguintes AutoHotkey script:

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

Coloque o arquivo .EXE em um diretório % PATH% . Eu nomeei o meu follow.exe .

Agora, você pode efetivamente seguir um arquivo .LNK do Windows em seu diretório de trabalho usando a seguinte sintaxe:

cd 'follow Shortcut.lnk'

onde destino de Shortcut.lnk é um diretório válido.

Demonstração:

Depois de configurar seu follow.exe , você poderá adicionar a seguinte função de shell ao seu arquivo ~/.bashrc para simplificar ainda mais a sintaxe. Obrigado, Daniel !

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

Agora, você pode seguir .LNK arquivos com apenas cd !

cd Shortcut.lnk

Demonstração:

    
por 11.04.2012 / 23:19
3

Parece que não é possível no momento, e a abordagem recomendada é usar o Junction utilitário:

About creating symbolic on msys

Atualização:

Obrigado iglvzx pela sua resposta.

No entanto, no meu caso, por vezes, a autocompletar bash coloca um / após o atalho, como cd /f/downloads/scripts.lnk/ , por isso uso como desculpa para brincar com bash scripting e ajustar o seu script, verificando também atalhos não aceitáveis ( quebrado ou apontando para arquivos):

cd() {

    shopt -s nocasematch

    if [[ -z "$1" ]];
        then
            echo Error: missing operand;
            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 Error: invalid destination;
                    return 2;
            fi;

            if [[ -f "$finaldestination" ]];
                then
                    echo Error: destination is a file;
                    return 3;
            fi;

            builtin cd "$finaldestination";

        else
            builtin cd "$destination";
    fi;
}
    
por 11.04.2012 / 21:39
1

É possível abrir atalhos de msys com cmd por meio do sinal /C :

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

Se for um atalho para uma pasta, ela será aberta. A barra tem de ter um escape , por isso o msys não converte /C para C:\ .

Caminhos relativos também funcionam, e aspas não são necessárias para caminhos simples. Se o arquivo lnk estiver na pasta atual:

cmd //C Shortcut.lnk
    
por 06.06.2014 / 17:16
1

Se você fizer um symlink (usando mklink -D <link name> <target dir> do cmd com privilégios de administrador) em vez de um atalho, o git bash poderá segui-lo com cd -P <link name> .

    
por 28.08.2018 / 22:12
0

Nossa, abordagem incrível iglvzx ! Eu recomendo uma melhoria minúscula no seu script ~/.bashrc para que um simples cd sem qualquer argumento ainda mude para o diretório pessoal do usuário.

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