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
mv
usando 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.