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

24

É possível renomear o diretório de trabalho atual de dentro de um shell (Bash no meu caso particular)? Se eu tentar fazer isso da 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? Percebo 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 posteriormente.

Nathan Osman
fonte

Respostas:

41

Sim, mas você deve consultar o diretório por 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"funciona.

Gilles 'SO- parar de ser mau'
fonte
Perfeito ... exatamente a resposta que eu estava esperando.
Nathan Osman
5
O problema básico é que você não tem permissão para remover ou renomear o especial "." e ".." nomes.
Barmar
2

Como na resposta do @Gilles, mas usando expansão de cinta por questões de brevidade:

mv ../{test,test2}
robstarbuck
fonte
1

E isso depende de como você define "alterando 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.

G-Man diz que 'restabelece Monica'
fonte