Exibe todos os arquivos de um diretório com o gato ao mesmo tempo

0

Estou escrevendo um script que me permite visualizar o conteúdo de todos os arquivos em um diretório selecionado inteiro, mas não sei como fazê-lo.

Eu estava pensando em direcionar a saída de ls para cat ou less , mas isso não parece funcionar.

Existe uma variável de linha de comando que eu preciso usar ou existem comandos que satisfaçam minha necessidade?

Eu quero isso para que eu possa ter um pico rápido no conteúdo dos arquivos sempre que eu estiver procurando por um determinado arquivo que não consigo lembrar.

    
por Animal91 04.04.2017 / 18:58

2 respostas

4

Isso é exatamente para o qual cat é. Se você quiser exibir o conteúdo de todos os arquivos em seu diretório, use

cat *

O shell expandirá * para a lista de arquivos. Se você quiser incluir arquivos ocultos também, use

cat * .*

ou

shopt -s dotglob; cat *

No entanto, se você quiser apenas identificar rapidamente um arquivo, talvez essa não seja a melhor ideia, especialmente se os arquivos forem longos.

Usar head pode ajudar nesse caso:

head *

exibirá as dez primeiras linhas de cada arquivo no diretório, com uma linha de título indicando o nome do arquivo.

    
por 04.04.2017 / 19:10
0

Veja " Por que * not * pars 'ls'? " por que a análise a saída de ls pode não ser uma boa abordagem.

Para o seu script:

#!/bin/sh

dir="$1"
PAGER="${PAGER:-cat}"

test -d "$dir" || exit 1

find "$dir" -type f -exec "$PAGER" {} \;

Isso levará o primeiro argumento de linha de comando e o atribuirá à variável dir . A variável PAGER será definida como cat se o usuário ainda não tiver configurado para outra coisa.

Se o diretório fornecido é um nome de diretório válido, find é usado para passar todos os arquivos regulares (incluindo arquivos regulares ocultos) no diretório, ou qualquer um de seus subdiretórios, para o pager.

Para limitar a pesquisa de arquivos apenas ao primeiro nível do diretório fornecido, insira -maxdepth 1 antes da opção -exec para find .

Usando:

  • cat todos os arquivos em /tmp :

    $ ./script /tmp
    
  • Veja as 10 primeiras linhas de todos os arquivos em seu diretório pessoal:

    $ PAGER=head ./script "$HOME"
    
  • Leia todas as histórias no seu diretório ~/stories :

    $ PAGER=less ./script "$HOME/stories"
    

Extensão:

#!/bin/sh

dir="$1"
suf="$2"
PAGER="${PAGER:-cat}"

test -d "$dir" || exit 1

find "$dir" -type f -name "*$suf" -exec "$PAGER" {} \;

Isso permitirá que o script receba um sufixo de nome de arquivo adicional como

$ ./script /tmp .txt
    
por 05.04.2017 / 09:17