O utilitário rename
no Ubuntu pode renomear estruturas de diretórios, mas ele não será limpo após ele mesmo.
rename 's#(.+)/(.+)/(.+)#--#' */*/*/
Cole -vn
no final se quiser que ele lhe diga o que vai fazer antes de renomear qualquer coisa, mas aqui está um pequeno arnês de testes que mostra o que é possível:
$ mkdir -p 2014/06/15
$ touch 2014/06/15/photo_{001..003}.jpg
$ tree
.
└── 2014
└── 06
└── 15
├── photo_001.jpg
├── photo_002.jpg
└── photo_003.jpg
$ rename 's#(.+)/(.+)/(.+)#--#' */*/*/
$ tree
.
├── 2014
│ └── 06
└── 2014-06-15
├── photo_001.jpg
├── photo_002.jpg
└── photo_003.jpg
Simplificando, ele está sendo alimentado pelos diretórios de terceiro nível e renomear é ler os dois segmentos anteriores e renomeá-lo, colando-o no diretório atual. Como você pode ver, haverá uma carga de diretórios de ano. Assumindo que eles estão vazios, você poderia limpar com algo parecido (e eu oro para você verificar se eles estão vazios primeiro):
find -maxdepth 1 -type d -regex '\./[0-9][0-9][0-9][0-9]' -exec rm -irf "{}" \;
Estou usando a opção -i para forçá-lo a perguntar antes de excluir todos os arquivos. Remova isso por sua conta e risco.