Exibe um menu de nomes de arquivos e permite que o usuário selecione um arquivo digitando um número

1

Eu criei um script que permite ao usuário selecionar um arquivo copiando e colando esse arquivo. Em seguida, execute um grep nesse arquivo. Eu quero saber se é possível colocar um número na frente de cada arquivo no diretório para que o usuário só tenha que digitar um número.

O que tentei:

  • Do ls -l then ls | wc -l então, o usuário seleciona o número do arquivo correspondente, sem sorte.
  • Em seguida, ls -i , tentou executar um grep usando o número do nó para esse arquivo, sem sorte.
por user1545938 01.08.2012 / 14:27

4 respostas

8

Em bash , ksh e zsh , você pode usar a palavra-chave select para isso:

select file in *; do
  grep 'something' "$file"
done

Para fornecer a instrução use enquanto a lista select é exibida, defina $PS3 antes executando select , por exemplo:

PS3='number of file to grep in, ^C to exit: '
    
por 01.08.2012 / 14:32
2

Para colocar os números de linha na frente de ls, pode ser mais fácil

 ls -1 | cat -n

Em seguida, para selecionar o número do arquivo N, você pode tentar

ls -1 | sed -n Np
    
por 01.08.2012 / 14:49
0

A propósito, você pode usar o número de inode e fazê-lo com apenas ls :

ls -i

produzirá algo como:

 $ ls -i
13107210 file
13238318 dir
13109301 script.sh

No entanto, o número é muito grande em comparação com cat -n . Mas a principal vantagem dessa maneira é que você sempre encontrará o arquivo exato, enquanto com cat -n + sed você pode pegar outro se entre dois comandos novos arquivos foram criados em seu diretório.

    
por 01.08.2012 / 17:05
0

Também dê uma olhada em percol, fzy, smenu e amigos. Eles ficarão felizes com stdin, apresentarão um menu de seleção fácil de usar com filtro interativo e canalizarão as linhas selecionadas novamente.

    
por 08.11.2017 / 20:37

Tags