Como procurar todos os arquivos que começam com o nome “ABC” em um diretório?

26

Eu preciso procurar arquivos começando com um nome específico. Pode haver vários arquivos que começam com um padrão específico e quero listar todos esses arquivos presentes no diretório.

    
por R11G 05.12.2012 / 07:00

10 respostas

27

Para completar as respostas existentes:

ls

O utilitário de lista de diretórios padrão ls pode ser usado em combinação com os curingas do shell. Para procurar todos os arquivos com o padrão abc :

ls abc*   # list all files starting with abc---
ls *abc*  # list all files containing --abc--
ls *abc   # list all files ending with --abc

Observe que a extensão do arquivo também é relevante para os resultados da pesquisa.

tree

No caso de precisarmos listar arquivos em uma árvore de diretórios, também poderemos emitir tree para pesquisar um determinado padrão como:

tree -P 'abc*'  # list directory tree of file starting with abc---
tree -l 'def*'  # exclude files starting with def---

Nesse caso, tree suporta curingas.

    
por Takkat 05.12.2012 / 08:42
22

Você pode usar o comando find para pesquisar arquivos com padrão

find . -type f -name "abc*" 

O comando acima irá procurar o arquivo que começa com abc sob o diretório de trabalho atual.

-name 'abc' listará os arquivos que correspondem exatamente. Por exemplo: abc

Você também pode usar

 -iname
 -regex 
Opção

com o comando find para pesquisar o nome do arquivo usando um padrão

    
por devav2 05.12.2012 / 07:48
6

Existem várias maneiras de fazer isso, dependendo exatamente do que você deseja fazer com elas. Geralmente, se você quiser apenas listá-los, você pode fazê-lo em um terminal usando:

find | grep '^\./ABC'

... e substituindo ABC pelo seu texto.

Para entender o comando, vamos dividi-lo um pouco:

  • find lista todos os arquivos no diretório atual e seus subdiretórios; usá-lo só vai listar tudo lá. Observe que find produz cada arquivo ou diretório que começa com ./ , indicando que seu caminho é relativo ao diretório atual. Estar ciente disso é importante porque significa que procuraremos resultados começando com ./ABC e não apenas ABC .

  • O caractere de canal | redireciona a saída de um comando para outro, nesse caso, a saída de find é redirecionada para grep . Isso é chamado de tubulação.

  • grep pega a saída e filtra usando o padrão fornecido, ^\./ABC .

    • Observe que o padrão é citado com aspas simples ' ' para impedir que o shell interprete os caracteres especiais nele.
  • Agora, o próprio padrão é escrito em uma sintaxe específica chamada expressão regular ou regex para breve. Regex é uma ferramenta de busca extremamente poderosa se você dominá-la, e existem sites como esta que ensinam sobre isso com mais profundidade , mas observe que grep não é um mecanismo regex completo e você não pode fazer tudo com ele.

  • Para nosso propósito:

    • ^ na regex corresponde ao início da string; isso impede que ele corresponda ao padrão se ele não ocorrer no início do nome do arquivo.

    • . na regex também tem um significado especial: significa "corresponde a qualquer caractere único aqui". Caso você queira usá-lo como um ponto literal, você terá que "escapar" usando uma barra invertida \ antes. (Sim, combinar qualquer personagem seria inofensivo no nosso caso, mas eu fiz isso por completo.)

por Yamaho 05.12.2012 / 07:58
3

você pode usar o GREP, acho que essa é a solução mais simples, provavelmente também adicionar alguns outros parâmetros do grep para tornar a correspondência mais precisa

tree | grep ABC
    
por Tomáš Tibenský 30.03.2015 / 13:32
1

Você pode procurar um padrão específico usando o gerenciador de arquivos Nautilus e expressões regulares.

Para fazer isso, clique em Selecionar Itens Correspondentes no menu de engrenagem, como abaixo (você também pode pressionar Ctrl + s ). / p>

Em seguida, basta digitar a expressão regular ABC* e validar.

Todos os arquivos cujo nome corresponde ao seu padrão serão selecionados automaticamente.

Estou usando o Nautilus 3.6. * de GNOME3 PPA no Ubuntu 12.10 (Quantal).

    
por remjg 05.12.2012 / 16:06
1

eu uso

ls | grep abc

ou

ls -la | grep abc

Ele mostra todos os arquivos com abc, não apenas começando com abc. Mas é uma maneira muito fácil para eu fazer isso.

    
por Mariano Cali 18.06.2015 / 00:37
1

A solução mais fácil para mim

ls | grep PATTERN

Aqui você pode dar qualquer expressão regular no PADRÃO.

Por exemplo, para encontrar arquivos com "ab" em qualquer lugar dentro de seu nome, digite

ls | grep ".*ab.*"

Para encontrar os arquivos que começam com "ab", digite

ls | grep "^ab"
    
por Preetom Saha Arko 11.07.2017 / 06:20
0

Python:

$ python -c 'import sys,os;found=[os.path.join(r,i) for r,s,f in os.walk(".") for i in f if i.startswith("ABC")];map(lambda x: sys.stdout.write(x+"\n") ,found)'

Perl:

$ perl -le 'use File::Find;find(sub{ -f && $_ =~/^ABC/ && print $File::Find::name  },".")' 
    
por Sergiy Kolodyazhnyy 13.07.2017 / 05:36
0
printf "%s" /path/to/files/ABC*

Esta é a correspondência de padrões glob que é ancorada em ambas as extremidades. Isso corresponderá a todas as ocorrências de arquivos que começam com "ABC", como "ABC", "ABC.txt", "ABC123", mas não "xABC". A partir da linha de comando usando 'ls' no lugar de 'printf' aqui é uma alternativa segura, no entanto, dependendo da opinião de quem você concorda, 'ls' não é seguro para uso em um script. Nesse caso, usar 'printf' com correspondência de padrões globais é considerado seguro. Se você for usar isso em um script, a saída de 'printf' não conterá um novo caractere de linha até o final do fluxo de saída como tal:

printf "%s" /path/to/files/ABC*  

Retorna:

/path/to/files/ABC /path/to/files/ABC123

Se você precisar de quebras de linha após cada instância:

printf "%s\n" /path/to/files/ABC*

Retorna:

/path/to/files/ABC 

/path/to/files/ABC123

"/ path / to / files /" permanece na saída se você tiver digitado dessa forma quando você executou o comando 'printf'. Sem isso, apenas o nome do arquivo aparece:

printf "%s" ABC* 

Retorna

ABC ABC123

Supondo que você execute o comando no diretório em que os arquivos existem.

    
por EnterUserNameHere 13.07.2017 / 09:07
0

Comando-t em um dos meus plugins vim favoritos, é plugin baseado em Ruby acima da integração com FZF.

Usando Comamnd-T e FZF, você pode fazer a pesquisa com um mecanismo "fuzzy" extremamente rápido para:

  • Abrindo arquivos e buffers
  • Pulando para tags e ajuda
  • Execução de comandos ou pesquisas e comandos anteriores
  • com um número mínimo de pressionamentos de teclas.

Como você pode ver

Eu sempre busco no histórico de comandos abrindo um novo terminal e clico:

CTRL+R

Além de pesquisar em todas as pastas de forma recursiva, escrevendo em qualquer guia do terminal:

fzf

Em seguida, inicie o seu nome de arquivo

ABC

Além disso, você pode escrever dentro de vim

:CommandT 

Realmente útil especialmente em pastas grandes.

    
por HMagdy 30.01.2018 / 00:18