Isso deve funcionar:
find . -type f -name '*a*' -exec cat {} \;
Como exibo conteúdo de arquivos com nome contendo a letra 'a'?
eu tentei
cat|ls|grep 'a'
Isso deve funcionar:
find . -type f -name '*a*' -exec cat {} \;
O pager less tem um recurso que permite navegar por vários arquivos e saltar entre eles, portanto, se todos os arquivos estiverem no mesmo diretório, less *a* abrirá inicialmente o primeiro e você poderá, a qualquer momento, avançar para o próximo arquivo digitando :n ou retornando ao arquivo anterior digitando :p . Digitar = a qualquer momento exibirá o nome do arquivo atual. O pager less tem muitos outros recursos úteis, documentados e ainda não utilizados. A partir do programa, digite h para uma folha de dicas longa com várias páginas.
find -type f -maxdepth 1 -name '*a*' -exec less '{}' +
Se todos os arquivos estiverem localizados no mesmo diretório, esta versão curta fará isso:
cat *a*
No caso de nomes de arquivos engraçados começando com '-' a './' deve ser prefixo:
cat ./*a*
Os diretórios com a resultarão em uma mensagem de erro não prejudicial.
Se os arquivos estiverem localizados em um diretório, você poderá usar
para i em * a *; do (echo $ i & cat; i & & echo ""); feito
para mostrar todos os arquivos. No entanto, você ainda é capaz de lembrar qual saída vem de qual arquivo e há uma separação da saída do arquivo individual.
Para exibir o conteúdo de todos os arquivos regulares no diretório atual cujo nome contém o caractere a :
find . ! -name . -prune -name '*a*' -type f -exec cat {} +
Embora com várias implementações find (incluindo a GNU one no seu Ubuntu), isso excluiria arquivos cujo nome contenha seqüências de bytes que não formam caracteres válidos na localidade atual.
Com algumas implementações de find , você pode usar -depth 1 em vez do padrão ! -name . -prune . Alguns outros (como o GNU find ) têm -mindepth 1 -maxdepth 1 (embora -maxdepth 1 seja suficiente aqui, pois a profundidade 0 é . , o que é excluído tanto pelo -type f como pelo -name '*a*' ).
O problema de caractere inválido pode ser aliviado usando zsh e:
cat ./*a*(D.)
O que também teria o benefício de relatar um erro se não houver um arquivo correspondente e a classificação da lista de arquivos para que a saída seja menos aleatória.
Se você também quiser incluir links simbólicos em arquivos regulares, adicione uma opção -L a find ou - no qualificador zsh glob.
Se você quiser excluir arquivos ocultos, adicione um ! -name '.*' a find ou remova o D do qualificador glob do zsh.
Observe que cat concatena esses arquivos. Se a1 contiver foo sem um caractere de nova linha à direita (o que não aconteceria se a1 fosse um arquivo de texto adequado) e a2 continha bar , a saída seria foobar .
Para incluir os nomes dos arquivos, você pode usar grep '^' /dev/null em vez de cat , o que deve preceder cada linha com o nome do arquivo. Ou grep -n '^' /dev/null também inclui números de linha.
Com a implementação GNU de head (como encontrado no seu Ubuntu), você pode usar head -vc-0 que adicionaria um
===> ./file_with_a <===
cabeçalho e uma linha vazia entre cada arquivo.