Encontre todos os arquivos com um nome de arquivo começando com uma sequência especificada?

148

Eu tenho um diretório com aproximadamente 100000 arquivos e desejo executar alguma função em todos os arquivos que começam com uma sequência especificada, que pode corresponder a dezenas de milhares de arquivos.

eu tentei

ls mystring*

mas isso retorna com o erro do bash 'Muitos argumentos'. Meu próximo plano era usar

find ./mystring* -type f

mas isso tem o mesmo problema.

O código precisa parecer algo como

for FILE in `find ./mystring* -type f`
do
    #Some function on the file
done
RikSaunderson
fonte
Em vez de um forloop, você deve findentrar while.
Pausado até novo aviso.

Respostas:

277

usar

find . -name 'mystring*'
Sergio Tulentsev
fonte
10
e para executar alguma função "find. -name 'mystring *' -exec [command]", por exemplo, exclua "find. -name 'mystring *' -exec rm {} \;"
Eldar
2
Onde {} é um marcador de posição para o nome do arquivo :-) (para que você possa construir suas próprias ações) #
457 Sergio Tulentsev 27/10/10
1
Isso parece retornar todos os resultados que contêm a string? O
Brian Z
7
... ou find . -iname 'mystring*'para pesquisa sem distinção entre maiúsculas e minúsculas.
precisa
OP refere-se a um único diretório para inserção -maxdepth 1antes do -nameencontrar limite para a pasta atual
jacanterbury
27
ls | grep "^abc"  

fornecerá todos os arquivos começando (que é o que o OP especificamente exigiu) com a substring abc.
Ele opera apenas no diretório atual, enquanto findopera recursivamente em subpastas.

Para usar findapenas arquivos começando com sua string, tente

encontrar . -name 'abc' *

Jacanterbury
fonte
4

Se você deseja restringir sua pesquisa apenas aos arquivos que deve considerar usar -type fem sua pesquisa

tente usar também -inamepara pesquisa que não diferencia maiúsculas de minúsculas

Exemplo:

find /path -iname 'yourstring*' -type f

Você também pode executar algumas operações nos resultados sem sinal de tubulação ou xargs

Exemplo:

Pesquise arquivos e mostre seu tamanho em MB

find /path -iname 'yourstring*' -type f -exec du -sm {} \;
matson kepson
fonte