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.