Eu faria isso em perl, porque eu não sou tão bom com o bash.
- faça um loop sobre todas as pastas de forma recursiva (procure um algoritmo de percurso de árvore, bastante simples)
- Para cada pasta, liste todos os arquivos com
ls - use
split(' ', sfilename);para criar uma lista de palavras usadas. Inserir em uma lista@common_words - Para cada arquivo seguinte, divida seu nome da mesma maneira e remova qualquer palavra de
@common_wordsnão em$filename. (com o grep do perl, por exemplo, ou use um loop) - Depois de ter a lista de palavras comuns, volte a fazer um loop sobre os arquivos e para cada
- Para cada arquivo, para cada palavra, renomeie o arquivo para remover a palavra (usando
mvdo bash comsystemdo perl) - concluído.
Aqui está um script inicial que precisaria ser reformulado, mas aborda seu problema.
Problemas:
- Se todos os seus arquivos terminarem com "_word.ext", a extensão será removida
- Se você descomentar a substituição que deveria ignorar a extensão, o mv não funciona mais, então você teria que salvar o nome em um hash: name_without_extention = > "name_with_extension"
- Ele só analisa uma única pasta e também usa os nomes das subpastas, portanto, é necessário usá-la em uma pasta sem subpasta.
Agora cabe a você melhorar isso =)