Como pesquisar o conteúdo em um diretório do terminal enquanto você está no meio de escrever um comando?

2

Estou tentando me sentir confortável com o terminal, usando-o o máximo que puder. O aspecto do meu uso do computador, onde eu perco a maior parte do tempo usando a linha de comando, em vez do gui, é quando tento encontrar uma música que me interessa.

A minha pasta de músicas está estruturada como Música- > Bandas- > Álbuns- > Músicas

Eu frequentemente esqueço o Álbum em que uma Canção está presente, mas eu sempre lembro o que Band tocou essa música.

Eu não pesquiso a música do diretório Música porque demora muito para encontrar uma música (eu tenho muita música), então eu procuro a música depois que eu chego Diretório Band . Agora na linha de comando eu tenho

# totem /home/user/Music/Red\ Hot\ Chili\ Peppers/

mas eu esqueci o Álbum em que a Canção "Dani California" está em (totem é um tocador de música no gnome.) A maneira mais rápida de contornar isso é para entrar na pasta Red Hot Chili Peppers no gerenciador de arquivos gui e apertar ctrl + f e digitar "Dani California".

Existe uma maneira que eu possa pesquisar o conteúdo em um diretório do terminal enquanto eu estou no meio de escrever um comando? Ou você tem alguma recomendação sobre como eu posso alcançar mais rapidamente o mesmo objetivo que eu faço no gui a partir da linha de comando?

    
por user784637 05.09.2011 / 04:17

5 respostas

2

Isso não é particularmente intuitivo, pois o preenchimento automático não está funcionando, mas você pode conseguir o que deseja usando máscaras de arquivo:

totem /home/user/Music/Red\ Hot\ Chili\ Peppers/*/Dani\ Ca*

Outra opção é usar find e então passar os nomes de arquivos encontrados para totem:

find . -name "Dani Calif*" -exec totem '{}' +

Embora isso não seja exatamente "pesquisar enquanto você escreve um comando"

    
por Sergey 05.09.2011 / 04:42
0

Pressionar "tab" duas vezes deve fornecer uma lista de arquivos ou diretórios. Em seguida, basta digitar parte do que você quer e apertar "tab" para completá-lo.

    
por Dave Kincaid 05.09.2011 / 04:47
0

Questão realmente interessante. Essa é uma maneira muito legal de se forçar a usar o CLI. Mas cara, isso parece muito doloroso para a música. Eu não vejo como eu poderia viver com os limites do Totem (vs. Banshee ou Rhythmbox). Eu acho que proibir-se de usar o Nautilus e o gedit seria suficiente para forçá-lo a usar um terminal com mais frequência.

Mas admiro sua paciência e disciplina. Talvez você queira procurar um player de música orientado por CLI / Terminal. Aqui está uma boa revisão de alguns: link

Pedimos desculpas antecipadamente se nenhum deles resolver o problema específico que você está perguntando, mas dado o contexto de sua pergunta, acho que você pode achar essas opções interessantes mesmo assim. Boa sorte.

    
por Mark Russell 05.09.2011 / 05:21
0

A solução de metachar já sugerida é ótima, mas às vezes não é suficiente.

Eu uso freqüentemente mais do que um terminal por vez, multiplexando uma única janela usando screen , mas as guias do gnome-terminal também podem fazer o trabalho (devo salientar que a solução screen funcionará também em um ssh session ou em um terminal virtual, então é mais geral).

Então, mudando para outro terminal, você pode usar o comando locate cujos resultados são obtidos muito mais rapidamente do que a partir de find .

    
por enzotib 05.09.2011 / 14:28
0

Isso também pode ser feito via Bash programmable completion . Eu montei um pequeno script de amostra.

O script abaixo completa um comando fap ( encontrar e reproduzir ) que você deve definir separadamente, por exemplo

fap

#! /bin/sh
file="$2"
totem "$file" > /dev/null &
exit 0

Em seguida, coloque o seguinte script no diretório /etc/bash_completion.d

/etc/bash_completion.d/fap

_fap()
{
    local cur prev dir i saveIFS

    COMPREPLY=()
    _get_comp_words_by_ref cur prev

    saveIFS=$IFS
    IFS=$'\n'    
    dir="$cur"
    if [ -z "$cur" ]; then
        dir="/home/user/music"
    elif ! [ -d "$cur" ]; then
        dir="'dirname "$cur"'"
    fi

    local files=$(find 'dequote "$dir"' -type f -iname "*${prev}*" -printf "%p\n")
    COMPREPLY=( $( compgen -W "${files}" -- $cur ) )

    for ((i=0; i < ${#COMPREPLY[@]}; i++)); do
        _quote_readline_by_ref ${COMPREPLY[i]} COMPREPLY[i]
    done

    IFS=$saveIFS

    return 0
} &&
complete -F _fap -o nospace fap

Altere a linha dir="/home/user/music" de acordo (pasta inicial da sua coleção de músicas). Próxima fonte do script

. /etc/bash_completion.d/fap

Agora você pode usar a conclusão da tabulação como esta

fap frozen [TAB]
fap frozen /home/user/music/MADONNA\ -\ RAY\ OF\ LIGHT/TRACKS/09\ -\ Madonna\ -\ Frozen.mp3

ou, se houver mais opções

$ fap girl [TAB]
$ fap girl /home/user/music/MADONNA\ -\ RAY\ OF\ LIGHT/TRACKS/[TAB][TAB]
/home/user/music/MADONNA\ -\ RAY\ OF\ LIGHT/TRACKS/04\ -\ Madonna\ -\ Candy\ Perfume\ Girl.mp3
/home/user/music/MADONNA\ -\ RAY\ OF\ LIGHT/TRACKS/13\ -\ Madonna\ -\ Mer\ Girl.mp3
$ fap girl /home/user/music/MADONNA\ -\ RAY\ OF\ LIGHT/TRACKS/0[TAB]
$ fap girl /home/user/music/MADONNA\ -\ RAY\ OF\ LIGHT/TRACKS/04\ -\ Madonna\ -\ Candy\ Perfume\ Girl.mp3
    
por arrange 07.09.2011 / 12:36