Como encontro todos os arquivos de um tipo específico no RHEL na linha de comando?

2

Estou procurando arquivos do tipo .flv , .avi , etc

Eu gostaria de ver uma lista de todos os arquivos (no meu servidor) desses tipos de arquivo (não me importo de fazer um por um, ou seja, ver todos os arquivos de .flv , então todos os arquivos de .avi ).

Então, uma vez que eu identifique os que eu quero mover, como copio vários arquivos que estão espalhados por todo o sistema de arquivos para uma pasta específica?

    
por marc.gayle 27.05.2011 / 09:20

3 respostas

3

Existem várias maneiras de procurar arquivos em sistemas GNU / Linux. As duas formas principais são locate e find :

  • locate usa um banco de dados de arquivos conhecidos em todo o sistema para localizar documentos. É muito útil, mas requer manter esse banco de dados atualizado (com updatedb ), o que pode levar muito tempo;
  • find procura arquivos em um determinado diretório. Geralmente é mais lento que locate (não tem banco de dados persistente), mas é mais bem ajustado.

Portanto, se você precisar encontrar todos os arquivos no sistema que correspondem aos seus critérios, use locate :

$ locate --regex "avi|flv" | grep '\.\(avi\|flv\)$'

ao passo que se você estiver pesquisando em um diretório específico e quiser ter certeza de não ter efeito de atraso do cache, poderá usar find :

$ find /path/to/your/directory -regex '.*\.\(avi\|flv\)'

Agora, para copiar esses arquivos para uma pasta específica:

$ locate --regex "avi|flv" | grep '\.\(avi\|flv\)$' | xargs cp /path/to/specific/folder

ou

$ find /path/to/your/directory -regex '.*\.\(avi\|flv\)' -exec cp {} /path/to/specific/folder \;
    
por 27.05.2011 / 09:31
1

Expandindo o comentário do Raphnik, você pode salvar um pipe através do grep colocando na parte regex do locate ou encontrar comandos: '\.avi$|\.flv$' - ele irá combinar arquivos com extensões .avi e .flv.

    
por 27.05.2011 / 11:08
0

Provavelmente, maneiras mais elegantes de fazer isso com find -exec ou xargs, mas aqui está um rápido truque:

updatedb 

então

for fred in 'locate *.flv | awk ' { print $1 } '' do;
mv "$fred" /my/dest/folder/
done

(etc)

    
por 27.05.2011 / 09:28

Tags