Qual é a melhor maneira de se livrar de um símbolo (ponto de interrogação) em centenas de arquivos FLAC?

0

Eu recentemente copiei minha coleção de mais de 600 álbuns para o FLAC, e até agora eu nunca percebi que havia algo errado com os arquivos. Veja os arquivos em si parecem normais visualizá-los de dentro do Mint. E todos eles jogam bem.

Tudoparecebemaqui,certo.MaseupercebiaotentarrealmentecompartilharessesarquivoscomminhamáquinaWindowsqueelesnãoiriamreproduzir,nemelescopiariam.OWindowsmedeuumerrodizendoqueosnomesdosarquivoseramlongosdemais.EeusabiaqueeraBSporqueelesclaramentenãosão.Entãoissomemandouumaespiralpensandoqueoproblemaerasamba.

AcontecequandoeunavegopelaspastasdeálbunsquecadaumdosarquivosFLACtem?antesdofimdeles.

Seeuentrarempropriedades,essacoisafeiaestáescondidaláemvezda?doconsole.

Eéaíqueminhafrustraçãorealmentecomeçou.Euencontreiumcomandodeconsolequerealmenteresolvepartedomeuproblema.

Quandoinseridonapastadoálbum,eleremoveo?marca,masdeixaumespaçoentreonomedamúsicaeaextensãodoarquivo.

Assim, a história é muito longa, existe uma maneira melhor de remover o? de todos os meus arquivos FLAC de uma só vez, enquanto também não fazendo um espaço onde o símbolo seria?

Ou eu realmente tenho que percorrer manualmente cada álbum para fazer o comando e, em seguida, fazer manualmente um backspace em cada arquivo. Eu realmente espero que alguns de vocês sejam muito melhores nessas coisas do que eu.

UPDATE

Primeiramente, obrigado a todas as pessoas que deram conselhos sobre como corrigir isso.

Eu resolvi meu problema executando isto:

find -name $'*\n*' -exec rename $'s|\n||g' '{}' \;

Ele encontrou todos os arquivos na minha pasta de músicas com o símbolo newline e também não consegue inserir nada, de forma que o nome do arquivo termine em branco.flac ao invés de um espaço em branco (espaço) .flac.

    
por Daniel Nielsen 24.05.2018 / 18:46

2 respostas

3

Para remover qualquer caractere que não possa ser removido pelo Windows dos nomes de arquivos FLAC no diretório atual:

for f in *.flac; do
  mv "$f" "$(echo -n "$f" | tr -cd ' -~' | tr '<>:"/\|?*' '_')"
done

Isto irá:

  • Exclua caracteres não ASCII ou não imprimíveis no nome do arquivo: tr -cd ' -~' ;

  • Substitua por sublinhados os caracteres ASCII imprimíveis que o Windows não aceita: tr '<>:"/\|?*' '_' .

Em particular, seus nomes de arquivos têm um '\n' (nova linha, U + 000A) antes de .flac .

    
por 24.05.2018 / 19:20
2

A resposta do AlexP é ótima, mas se você estiver disposto a instalar algum software extra, há uma opção ainda mais fácil.

Veja desintoxicação . É um programa morto-simples, empacotado pela maioria das distribuições, que faz quase exatamente a mesma coisa que o script de shell que AlexP postou, enquanto itera automaticamente pela pasta inteira em que é executado. Pela simples simplicidade de uso, é na lista razoavelmente curta de programas que eu instalo em praticamente todos os sistemas Linux que eu configurei.

Como mais uma alternativa para arquivos em um único diretório, renameutils permitirá que você renomeie o terminal rapidamente e facilmente usando o seu editor de texto preferido. Quando usado com um editor de estilo Vi ou EMACS, ele fornece uma maneira razoavelmente fácil de executar transformações em lote complexas em nomes de arquivos usando o suporte de expressão regular integrado do editor.

    
por 24.05.2018 / 21:53