Por que essa operação de renomeação não funciona? [duplicado]

1

Isso funciona:

$ touch abcdefg
$ mv -v abcdefg abc[de]fg
‘abcdefg’ -> ‘abc[de]fg’

Mas isso não funciona:

$ touch abcdefg
$ mv -v abcdefg abc[d]efg
mv: ‘abcdefg’ and ‘abcdefg’ are the same file

Por quê?

    
por EmmaV 16.10.2015 / 05:46

1 resposta

9

O shell expandirá os padrões de acordo com o nome do arquivo.

  • o primeiro formulário se expande para abcdfg (no e) e / ou abcefg (no d) e nenhum arquivo existe, portanto o padrão é deixado sem expansão, e o comando é o que você pensa que é; efetivamente,

    mv -v "abcdefg" "abc[de]fg"
    
  • O segundo formulário se expande para abcdefg , e esse arquivo existe, então o padrão se expande para o nome do arquivo e, assim, o comando é, efetivamente,

    mv -v abcdefg abcdefg
    

Tente ver quando o padrão é mantido ou expandido.

touch abcdefg
ls -l abc[de]fg ; echo abc[de]fg
ls -l abc??fg ;   echo abc??fg
ls -l abc?fg ;    echo abc?fg
ls -l abc[d]efg ; echo abc[d]efg
    
por 16.10.2015 / 06:16