Como encontro vários arquivos com uma string no nome do arquivo (ou corpo do texto) e depois movo todos esses arquivos para uma pasta específica?

Como encontro vários arquivos com uma string no nome do arquivo (ou corpo do texto) e depois movo todos esses arquivos para uma pasta específica?

Diga - e se eu quisesse mover todos os arquivos HTML em vários diretórios independentes com a palavra "heavengames" no nome do arquivo (e como segunda pergunta, todos os arquivos HTML com a palavra "heavengames" no corpo do texto) para um novo diretório chamado "tópicos de jogos celestiais"?

Responder1

Para mover arquivos com a palavra no 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 palavra no corpo:

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

obs. para verificar se tudo está correto, adicione echoantes mvna primeira execução.

Responder2

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

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

Para obter mais flexibilidade (por exemplo, para recriar a hierarquia de diretórios, procurezmv(hámuitos exemplos neste site).

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

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

Para comandos mais portáveis, use find. VerA resposta de Rush.

informação relacionada