Переименование текущего каталога из оболочки - возможно?


24

Можно ли переименовать текущий рабочий каталог из оболочки (в моем случае это Bash)? Если я пытаюсь сделать это простым способом, я получаю сообщение об ошибке:

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

Есть ли другой способ сделать это без изменения текущего каталога? Я понимаю, что могу легко добиться этого, перейдя в родительский каталог, но мне любопытно, если это необходимо. В конце концов, если я переименую каталог из другой оболочки, я все равно смогу впоследствии создать файлы в исходной оболочке.

Ответы:


41

Да, но вы должны ссылаться на каталог по имени, а не с помощью .обозначения. Вы можете использовать относительный путь, он просто должен заканчиваться чем - то другим , чем .или ..:

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

Вы можете использовать абсолютный путь:

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

Точно так же, rmdir .никогда не будет работать, но rmdir "$PWD"работает.


Идеальный ... именно тот ответ, на который я надеялся.
Натан Осман

5
Основная проблема заключается в том, что вам не разрешается удалять или переименовывать специальные "." и ".." имена.
Бармар


1

И это зависит от того, как вы определяете «изменение текущего каталога».

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

порождает подоболочку и изменяет текущий каталог в подоболочке, но оставляет основную оболочку там, где она была.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.