É 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.