Crie um arquivo simples changeName.sh
da seguinte forma:
#!/bin/bash
fileName=$(basename $1)
filepath=$(dirname $1)
secondDir=$(basename $filepath)
firstDir=$(basename $(dirname $filepath))
parentDir=$(basename $(dirname $(dirname $filepath)))
mv $1 $filepath/${parentDir}_${firstDir}_${secondDir}_$fileName
salve-o, por exemplo, em /home/yourUser/bin
.
Alterar permissão para changeName.sh
:
chmod +x /home/yourUser/bin/changeName.sh
Abra o arquivo /home/yourUser/.bashrc
e adicione no final desta linha:
PATH=$PATH:/home/yourUser/bin
salve e recarregue:
source .bashrc
Agora você tem um novo utilitário que pode alterar o nome para o arquivo usando a pasta como parte do nome.
Tente isto:
find mainDirectory -name "*.jpeg" -exec changeName.sh {} \;
mainDirectory
pode ser absoluto ou relativo.
Testado no lubuntu 12.04
dirname tira o último componente do nome do arquivo enquanto basename retira o diretório e o sufixo dos nomes dos arquivos.
Então, para obter o terceiro nível do diretório:
parentDir=$(basename $(dirname $(dirname $filepath)))