cat todos os arquivos, exceto um select alguns

1

Se houver alguma sintaxe específica para que eu possa cat de todos os arquivos em um diretório, exceto os selecionados. Por exemplo, suponha que eu tenha ~ 1200 arquivos de texto contendo algumas linhas, cerca de 3 ou 4 linhas por arquivo, exceto que existem alguns arquivos:

readme.md
contrib.rst
licence.txt

que são mais longos. Quero ver o conteúdo de todos os arquivos, exceto os 3 (ou, se possível, mais) arquivos mencionados acima.

Eu tentei o seguinte comando:

cat !{readme.md,contrib.rst,licence.txt}*.*

porque vi em algum lugar um uso de cat da seguinte forma:

cat [!t][!m][!p]*.sh

Eu pensei que, desde, {a,b} significa um conjunto em bash-scripts, negando que isso funcione. Claro que eu estava errado.

    
por hjpotter92 21.11.2015 / 12:55

4 respostas

4

Tente isso com o recurso de correspondência estendida de bash:

shopt -s extglob
cat !(readme.md|contrib.rst|licence.txt)
    
por 21.11.2015 / 14:04
2

Tente isso com o bash:

GLOBIGNORE="readme.md:contrib.rst:licence.txt"
cat *
unset GLOBIGNORE
    
por 21.11.2015 / 13:47
1

O que você já tentou?

São sempre os mesmos arquivos que você deseja ignorar.

Nesse caso, você pode codificá-los em um comando. Por exemplo. algo como find ! -name readme.md -o ! -name contrib.rst -o ! -name licence.txt -exec cat {} \+

Agora, se você quiser algo que pule todos os arquivos maiores que 4 linhas sem conhecer os nomes dos arquivos de antemão, a solução ficará obviamente mais complexa. Nesse caso, edite sua postagem.

    
por 21.11.2015 / 13:17
1

Sem modificar a configuração atual do shell , é possível executar cada proposta Cyrus em um subshell

(GLOBIGNORE="readme.md:contrib.rst:licence.txt" ; cat *)

bem como

(shopt -s extglob; cat !(readme.md|contrib.rst|licence.txt))
    
por 21.11.2015 / 15:49