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


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.