Renomeando o diretório atual de um shell – possível?

É possível renomear o diretório de trabalho atual de dentro de um shell (Bash em meu caso particular)? Se eu tentar fazer isso de maneira direta, termino com um erro:

 nathan@nathan-desktop:/tmp/test$ mv . test2 mv: cannot move ‘.’ to ‘test2’: Device or resource busy  

Existe outra maneira de fazer isso sem alterar o diretório atual? Sei que posso fazer isso facilmente mudando para o diretório pai, mas estou curioso para saber se isso é necessário. Afinal, se eu renomear o diretório de outro shell, ainda posso criar arquivos no shell original depois.

Resposta

Sim, mas você deve se referir ao diretório pelo nome, não usando . notação. Você pode usar um caminho relativo, ele só precisa terminar com algo diferente de . ou ..:

/tmp/test$ mv ../test ../test2 /tmp/test$ pwd /tmp/test /tmp/test$ pwd -P /tmp/test2 

Você pode usar um caminho absoluto:

/tmp/test$ cd -P . /tmp/test2$ mv "$PWD" "${PWD%/*}/test3" /tmp/test2$ 

Da mesma forma, rmdir . nunca” funcionará, mas rmdir "$PWD" sim.

Comentários

  • Perfeito … exatamente a resposta que eu esperava.
  • O problema básico é que você ' não tem permissão para remover ou renomear o ". " e .. " nomes.

Resposta

Como na resposta de @Gilles, mas usando expansão de chaves para abreviar:

 mv ../{test,test2}  

Resposta

E depende de como você define “alterar o diretório atual ”.

/tmp/test$ (cd .. && mv test test2) /tmp/test$ pwd /tmp/test /tmp/test$ pwd -P /tmp/test2 

gera um subshell e altera o diretório atual no subshell, mas deixa seu shell principal onde estava.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *