Como encontro um monte de arquivos com uma string em seu nome de arquivo (ou texto do corpo) e movo todos esses arquivos para uma pasta específica?

5

Diga - e se eu quisesse mover cada arquivo HTML em vários diretórios independentes com a palavra "heavengames" em seu nome de arquivo (e como uma segunda pergunta, todos os arquivos HTML com a palavra "heavengames" em seu corpo) novo diretório chamado "heavengames-threads"?

    
por InquilineKea 14.06.2012 / 22:59

2 respostas

4

Para mover arquivos com a palavra em seu nome:

find /path/to/dir1 /path/to/dir2 /and/so/on -type f -iname "*heavengames*" \
-exec mv -t /path/to/heavengames-threads {} \+

Para mover arquivos com palavras em seu corpo:

find /path/to/dir1 /path/to/dir2 /and/so/on -type f -exec grep -q heavengames {} \; \
-exec mv -t /path/to/heavengames-threads {} \+

ps. Para verificar se tudo está correto, adicione echo antes de mv na primeira execução.

    
por 14.06.2012 / 23:05
2

Em zsh ou bash ≥4, com base no nome do arquivo:

mkdir heavengames-threads
mv **/*heavengames*.html heavengames-threads/

Para mais flexibilidade (por exemplo, para recriar a hierarquia de diretórios, procure zmv (existem muitos exemplos neste site ).

Use grep para pesquisar o conteúdo do arquivo. Com versões recentes de utilitários GNU (ou seja, em Linux não integrado ou Cygwin):

grep -RZ heavengames . | xargs -0 mv -t heavengames-threads/

Para comandos mais portáteis, use find . Veja Resposta do Rush .

    
por 17.06.2012 / 04:30