O -r
não está ajudando aqui, tente colocá-lo após o read
.
Opcional: depois de while
e for
você precisa de ;
ou de uma nova linha, mas não precisa dos dois! Como você tem novas linhas antes das palavras-chave do
, é possível remover essas duas ;
s.
As citações devem passar pelos argumentos, não pelo comando inteiro:
mv -i "$mp3" "/home/shady/Music/$f"
Eu adicionei -i
para que mv
não tente sobrescrever nenhum arquivo existente.
Crucialmente, você tem um loop dentro de um loop. Você não pode mover um arquivo mp3 várias vezes! Se você quiser misturar dois conjuntos de nomes de arquivos, tente usar paste
para extrair linhas de cada arquivo e combiná-las:
paste <(find ./music/* -maxdepth 1 -printf '"%p"\n') /home/shady/piku.txt | sed 's+^+mv -i +' > /tmp/move_my_files.sh
Depois, você pode ver o arquivo gerado e ver se ele faz o que você deseja.
(Pode ser necessário colocar aspas em torno de todos os nomes de arquivos em piku.txt, se eles contiverem espaços.)
Se você está feliz com a aparência do script move_my_files.sh
, pode executá-lo:
bash -e -x /tmp/move_my_files.sh
Se eu entendi mal sua intenção, talvez seja necessário explicar melhor, incluindo o conteúdo do piku.txt e o resultado esperado, e como mp3
arquivos se tornam ogg
arquivos!