Tente:
find . -maxdepth 2 -mindepth 2 -type d -execdir bash -c 'mv "$1" "./album_${1#./}"' mover {} \;
Notas:
-
Para formar o nome do diretório de destino, precisamos remover o
./inicial que estará no nome do diretório. Para isso, usamos a remoção do prefixo do shell :${1#./}. -
Usamos
-execdirem vez de-execporque é mais robusto no caso de os diretórios serem renomeados enquanto o comando é executado. -
Na expressão
bash -c '...' mover {}, bash executa o comando entre aspas simples com$0atribuído amovere$1atribuído ao nome do arquivo,{}.$0não é usado, a menos que o shell precise gravar uma mensagem de erro. -
Não precisamos de nenhum recurso bash para esse código. Qualquer shell POSIX pode ser usado.
-
Se você quiser testar o comando antes de executá-lo para ter certeza de que deseja fazer o quê, adicione
echoda seguinte forma:find . -maxdepth 2 -mindepth 2 -type d -execdir bash -c 'echo mv "$1" "./album_${1#./}"' mover {} \;
Notas sobre -exec mv '{}' album_'{}'
-
Não cite o
{}.findlida com isso. -
Como o nome do arquivo fornecido por
findcomeçará com./, o formulárioalbum_{}não será bem-sucedido.
Exemplo
Vamos considerar esses diretórios:
$ ls *
user1:
child1 child2
user2:
child1 child2
Press any key to continue...
Agora. vamos executar nosso comando e ver os novos nomes de diretório:
$ find . -maxdepth 2 -mindepth 2 -type d -execdir bash -c 'mv "$1" "./album_${1#./}"' mover {} \;
$ ls *
user1:
album_child1 album_child2
user2:
album_child1 album_child2