Unix Comando para retornar todos os arquivos que terminam com dígito único e extensão TXT

3

Qual comando retorna todos os arquivos que terminam com um único dígito e têm a extensão TXT?

    
por Sai 13.11.2012 / 13:39

4 respostas

9

Uma das ferramentas mais básicas para localizar arquivos (ou outros tipos de nós) é o utilitário find .

find ./ -type f -name '*[!0-9][0-9].txt'

Isso pesquisará:

  • ... recursivamente a partir do diretório atual ( ./ ). Você pode alterar isso para outro caminho ou até mesmo deixá-lo, pois esse é o valor padrão para a maioria das versões de find .
  • ... para itens que são arquivos ao contrário de diretórios, nós de dispositivos, links simbólicos, etc. ( -type f ). Você poderia deixar isso se quisesse encontrar outros tipos também.
  • ... para itens que correspondem ao padrão de nome fornecido. Note que eu usei aspas simples para encobrir o padrão para que o bash ou seu shell não tentem explandá-lo para um padrão glob antes mesmo de encontrar o comando. A estrela corresponde a qualquer número de caracteres, então o final do arquivo deve ser algo diferente de um dígito, depois um dígito e, em seguida, sua extensão. ( -name '*[0-9].txt' )

Se houver arquivos cujo nome é apenas um dígito seguido por .txt , o comando acima os perderá, porque requer um não dígito antes do dígito. Os seguintes comandos equivalentes usam operadores booleanos para incluir nomes de arquivos com apenas um dígito ( -o é “ou” e ! é “não”):

find ./ -type f \( -name '*[!0-9][0-9].txt' -o -name '[0-9].txt' \)
find ./ -type f -name '*[0-9].txt' ! -name '*[0-9][0-9].txt'

Observe que isso diferencia maiúsculas de minúsculas. Se você quiser uma correspondência insensível, use -iname em vez de -name para corresponder também a file4.TXT . Também esteja ciente de que só porque um arquivo afirma ser um arquivo de texto com essa extensão não significa que é. No linux, qualquer arquivo pode ser qualquer tipo, não importa o nome. Também pode haver arquivos de texto com outras extensões ou sem nenhuma extensão.

    
por 13.11.2012 / 14:14
6

Usando planície velha POSIX globs:

ls -d -- [0-9].txt *[!0-9][0-9].txt
    
por 13.11.2012 / 13:52
2

Em zsh, com setopt extended_glob em ~/.zshrc :

print -lr -- *[0-9].txt~*[0-9][0-9].txt

Se os nomes dos seus arquivos não começarem com - e não contiverem \ , você poderá economizar um pouco de digitação:

print -l *[0-9].txt~*[0-9][0-9].txt

Substitua print -l por echo para mostrar os nomes com espaços entre eles, em vez de novas linhas. Substitua print -l por ls -d para ver os nomes dos arquivos formatados por ls (por exemplo, em cores, dependendo de seus aliases) ou apenas ls se nenhuma das correspondências for de diretórios:

ls *[0-9].txt~*[0-9][0-9].txt

Se você quiser ver arquivos em subdiretórios, adicione **/ antes do padrão:

ls **/*[0-9].txt~*[0-9][0-9].txt
    
por 13.11.2012 / 22:37
1

O comando Unix para retornar os arquivos que terminam com um único dígito e tem extensão .txt

ls -l *[0-9].txt
    
por 01.07.2013 / 21:04