renomeando arquivos mp3 começando com “-”

3

Eu extraí músicas do meu ipod, mas ao fazer isso, todas as músicas foram renomeadas "- [nome original da música]". Eu queria escrever um script bash que removeria o primeiro "-" porque talvez haja 1000 músicas lá e eu não posso renomear cada uma delas manualmente. Eu tentei fazer isso usando mv e renomear, mas não vai funcionar por causa dos caracteres especiais. Eu procurei na internet e encontrei uma solução que consiste em substituir "-" por "" mas o problema é que eu quero remover apenas o primeiro "-" e não os outros potenciais que podem estar na minha música nome. Espero ter sido claro o suficiente e que alguém possa me ajudar?

Aqui está o meu script original:

#!/bin/bash
for f in *; do
  echo "${f}";
  if [[ ${f:0:1} == "-" ]]; then
    echo "renaming ${f}";   
    rename.ul ${f} ${f:1} *.mp3;
fi
done
    
por Kashouf 14.07.2016 / 18:01

2 respostas

4
for f in -*.mp3; do
  echo mv -- "$f" "${f:1}"
done

Quando tiver certeza de que faz o que deseja, remova o echo .

O traço duplo ( -- ) é necessário para impedir que mv interprete - nos nomes dos arquivos como uma opção. A citação das variáveis é necessária para os casos em que os nomes de arquivos contêm espaços.

    
por 14.07.2016 / 18:06
2

Quando você passar um argumento começando com um traço para um comando, e você não quiser que este argumento seja interpretado como uma opção, passe -- (traço duplo) como um argumento primeiro. Com quase todos os comandos, -- significa "não há mais opções depois disso".

rename.ul -- '-' '' -*

Outra possibilidade é organizar o argumento para não começar com um traço. Isso nem sempre é possível, mas, para um nome de arquivo, é: adicione ./ na frente.

rename.ul ./- ./ ./-*

Note que você não precisa de um loop - rename está feliz com uma lista de arquivos como argumentos. Além disso, você não precisa passar o nome do arquivo inteiro, apenas a parte que deseja renomear. (Na verdade, um dos problemas com o seu script é que você está misturando as coisas, passando o nome do arquivo inteiro como uma string para substituir, mas passando uma lista de todos os arquivos a cada vez.)

Também coloque sempre aspas duplas em torno de substituições de variáveis , caso contrário seu script não funcionará com nomes de arquivos que contenham espaços.

    
por 15.07.2016 / 03:10