“mv: não pode stat file” no loop for

2

Eu queria renomear muitos arquivos com um padrão, então tentei isso para loop:

$ for f in *; do mv \""$f"\" \""HouseMD-S06E${f#*Episode }"\"; done

Mas recebi este erro:

mv: cannot stat '"House MD Season 6 Episode 01 - Broken (Parts 1 & 2).avi"': No such file or directory

Então o que eu fiz foi ecoar os comandos mv para um arquivo como este:

$ for f in *; do echo mv \""$f"\" \""HouseMD-S06E${f#*Episode }"\">>mv.txt; done

E execute o arquivo com source .

Alguma idéia de por que o primeiro não funcionou e como posso corrigi-lo?

    
por F.C. 05.11.2012 / 05:34

1 resposta

1

Não há necessidade de escapar de aspas duplas novamente. Se você usar aspas duplas, isso fará com que os espaços nos nomes dos arquivos não causem problemas, mesmo quando a variável $f for expandida.

for f in *; do mv "$f" "HouseMD-S06E${f#*Episode}"; done

Se você tiver essas "aspas duplas", suponha que você tenha o arquivo foo , então o shell tentará executar o comando:

mv ""foo"" …

E, obviamente, "foo" não existe - apenas foo - e é por isso que falha.

    
por 05.11.2012 / 08:56