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

23

É possível renomear o diretório de trabalho atual de dentro de um shell (Bash no meu caso particular)? Se eu tentar fazer isso de maneira direta, acabo 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? Eu percebo que posso conseguir 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, eu ainda posso criar arquivos no shell original depois.

    
por Nathan Osman 04.03.2015 / 01:20

3 respostas

40

Sim, mas você precisa se referir ao diretório pelo nome, não usando a 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" faz.

    
por 04.03.2015 / 01:26
2

Como em @Gilles responda, mas usando expansão de chaves para maior brevidade:

mv ../{test,test2}
    
por 15.09.2017 / 16:05
1

E isso depende de como você define "mudar 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 sua casca principal onde estava.

    
por 04.03.2015 / 19:18

Tags