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.

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.


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


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.