Aqui está uma versão ligeiramente melhorada do seu script - as principais diferenças são
-
usando um shell glob
*no lugar de$(ls)- consulte Armadilha de Bash # 1 -
citando qualquer expansão de variável (permite nomes de arquivos com espaço em branco ou outros caracteres engraçados - veja Bash Pitfall # 2 )
-
marcando o final das opções para
mvusando a extensão--GNU - isso permite manipular nomes de arquivos que começam com hífens, bem
Então
for d in *; do
[[ -d "$d" ]] && cd "$d" || continue
for f in *.mp4; do
echo mv -v -- "${f}" "${d}_${f}"
done
cd -
done
Ou, de forma mais portável, você pode fazer um loop de ./*.mp4 para proteger dos hífenes principais - mas, em seguida, você precisa retirá-lo durante o mv
for d in *; do
[ -d "$d" ] && cd "$d" || continue
for f in ./*.mp4; do
echo mv -v "${f}" "${d}_${f#./}"
done
cd -
done
Em ambos os casos, remova o echo (e o -v , se desejar), assim que tiver certeza de que está funcionando como você espera.