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_words
nã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
mv
do bash comsystem
do 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 =)