less com vários arquivos; comando para gerar nomes de arquivos

3

Eu quero ser capaz de passar manualmente por muitos arquivos usando less *.txt e, em seguida, continuar com os arquivos usando :n . Se eu determinar que um arquivo precisa ser processado, então eu quero ser capaz de dar um comando que irá, por exemplo, enviar o nome do arquivo atual para stderr, para que, uma vez que eu termine meus arquivos, eu tenha um lista de nomes de arquivos a serem processados. É algo assim possível? Existe outra ferramenta que é melhor para esse fim?

    
por reynoldsnlp 24.09.2015 / 04:47

3 respostas

3

Você pode configurar sua própria chave de comando less special. Crie o arquivo ~/.lesskey e coloque nele, no comece as 2 linhas:

#command
ok shell echo % >>/tmp/list\n

Em seguida, dê o comando

lesskey

para compilar o arquivo. Execute seu comando less em seus arquivos e quando quiser salve o nome do arquivo digite 2 chars ok . Você verá o eco:

!echo myfilename >>/tmp/list
!done  (press RETURN)

que salva o nome do arquivo atual (%) em /tmp/list . Pressione voltar para continuar. Eu escolhi o comando ok arbitrariamente. Você pode usar qualquer caractere único ou sequência de caracteres que desejar. Você pode anexar o comando :n ao final da linha shell em ~/.lesskey para também mover para o próximo arquivo.

Se você não tiver lesskey , corri o arquivo acima e passei por base64 , pois contém algum binário. Talvez você possa tentar usar isso:

echo 'AE0rR2MaAG9rAJtlY2hvICUgPj4vdG1wL2xpc3QKOm4AZQAAdgAAeEVuZA==' | base64 -d >~/.less
    
por 24.09.2015 / 08:45
2

Uma maneira é escrever um script que faça as coisas com menos pressionamentos de tecla, mas se você não tiver tempo para escrever e testar um script completamente, dependendo de qual versão de menos você tiver, sim, é possível usar menos.

Testado com less versão 444, aqui está uma demonstração de amostra.

Primeiro, suponha que você tenha quatro arquivos a.txt b.txt c.txt d.txt

$ less *.txt

a.txt parece bem, então você vê em seguida usando :n

b.txt parece ruim, então para marcá-lo você digita:

! echo % | tee -a bad.txt

Menos irá responder:

b.txt
!done  (press RETURN)

Você continua com :n .

c.txt parece ok. Você continua com :n

d.txt também parece ruim, mas você não precisa digitar novamente cada tecla, apenas ! e seta para cima, ele preencherá automaticamente o último comando e salvará d.txt to bad.txt

Então você q para sair menos.

Agora você pode revisar a lista salva:

$ cat bad.txt
b.txt
d.txt

Explicação

  • O ! shell command é executado, é claro, como um comando shell, em que% é o arquivo atual
  • usar tee é opcional, apenas para ter um indicador adicional depois de executar o comando, de qual nome de arquivo você acabou de salvar.
  • -a anexa, caso contrário, sobrescreveria e seu arquivo bad.txt só tem um único registro
  • você também pode ter apenas ! echo % >> bad.txt para anexar a bad.txt
por 24.09.2015 / 06:12
0

Quando eu precisar fazer algo assim, usarei um terminal com guias com less em uma guia e vi em uma guia adjacente.

Quando eu chegar a um arquivo que desejo marcar, clicarei duas vezes no nome do arquivo na parte inferior da tela less , alterne para a guia vi , clique com o botão direito do mouse e cole ENTER , em seguida, volte para a guia less .

Se houver mais do que algumas dúzias de arquivos (ou seja, é provável que demore mais do que alguns minutos), tentarei descobrir uma maneira de automatizar o processo de seleção com uma ou mais das ferramentas usuais:grep, awk , perl , etc.

grep para pesquisas simples, awk ou perl para pesquisas mais complicadas.

    
por 24.09.2015 / 06:08

Tags