Como renomear arquivos excluindo o "caractere usando o shell linux


1

Eu tenho um número de arquivos com aspas duplas no nome do arquivo como este:

"This_is_a_long_filename_with_quotes" .mp3

Eu tento usar a renomeação do comando linux, eu posso apagar facilmente o sublinhado usando

rename 's/_//g' *

mas quando tento com o \ "nada acontece (eu uso -n para ver as mudanças):

rename -n 's/\"//g' *

nada é renomeado

obrigado!


Você diz que ls | grep \"não retorna nada. Que tal echo *\"*ou ls *\"*? Se nenhum desses comandos mostrar nada, você não terá arquivos com aspas duplas em seus nomes; você tem arquivos com pares de aspas simples em seus nomes. Tente ls | grep \', echo *\'*ou ls *\'*. Se esses comandos encontrarem seus arquivos, renomeie-os com rename -n "s/'//g" *.
G-Man

Certo eles não são aspas duplas! Veja o comentário abaixo
Leosar

Eles são "aspas encaracoladas". Tente duas renameoperações enquanto corta e cola os caracteres de cotação exatos (abrir e fechar).
beroe

Respostas:


2

Você tem "aspas inteligentes" nos seus nomes de arquivo:

“Tokyo_String_Quartet-Beethoven_-Late_String_Quartets-CD1-11-Quartet”.mp3 

Experimente o renamecomando com os inseridos em vez de"

Ou sem usar renamevocê pode fazer a sedopção:

for f in *.mp3
    do
        new=$(echo $f | sed -E 's/[“”]//g')
        mv $f $new
    done

Como acontece com todas as operações de shell de lote mv, é mais seguro testar / executar em um backup da pasta original ... Você pode testar colocando echono lugar de mvquando tenta pela primeira vez.


1

Não há necessidade de escapar da citação dupla dentro do guote único.

rename -n 's/"//g' *

De qualquer forma nada é renomeado com ou sem escape eu não sei por que
Leosar

1) No meu renomear debian é um link para outro softlink em / etc / alternatives. Persiga os links e use dpkg -S ...no arquivo final para encontrar o pacote que fornece o executável. 2) Use dpkg -l package_namepara encontrar a versão do pacote -> no meu sistema com rename-0.20-3o comando acima relatado reescreveu que você queria. 3) Qual shell você usa? echo $SHELL
AnFi

O problema é que eles não são aspas duplas, como sugerido por @WildVelociraptor
Leosar

0

Eu consegui fazer isso no Bash com isso:

file=$(ls | grep \")
newName=$(echo $file | sed 's/\"//g')
mv $file $newName

Talvez o mesmo problema aqui, porque ls | grep \"não retorna nada
Leosar

Tem certeza de que são aspas duplas? Pode ajudar copiar e colar o nome do arquivo em outro lugar, para ver como ele é renderizado. Também pode ser um problema com o modo como o nome do arquivo é codificado; ASCII vs Unicode, talvez?
Zymhan

Ohh eles não são, este é o nome do arquivo: "Tokyo_String_Quartet-Beethoven_- Late_String_Quartets - CD1-11-Quarteto, _Op._131_in_C_sharp_minor -_Allegro" .mp3
Leosar

1
Você precisa cortar e colar aspas duplas de abertura e fechamento e usar 's / [“”] // g' na sua renomeação. (PS Eu não tenho esse problema com minhas gravações Lindsay Quartet!)
AFH

Acabei de ver que @beroe fez o mesmo ponto sob a pergunta original, mas deixarei meu comentário, já que dei o comando de edição que você precisa.
AFH
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.