Mengganti nama direktori saat ini dari shell - mungkin?


24

Apakah mungkin untuk mengganti nama direktori kerja saat ini dari dalam shell (Bash dalam kasus khusus saya)? Jika saya mencoba melakukan ini dengan cara langsung, saya berakhir dengan kesalahan:

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

Apakah ada cara lain untuk melakukan ini tanpa mengubah direktori saat ini? Saya menyadari bahwa saya dapat dengan mudah mencapai ini dengan mengubah ke direktori induk, tetapi saya ingin tahu apakah ini perlu. Lagi pula, jika saya mengganti nama direktori dari shell lain, saya masih bisa membuat file di shell asli sesudahnya.

Jawaban:


41

Ya, tetapi Anda harus merujuk ke direktori dengan nama, bukan dengan menggunakan .notasi. Anda dapat menggunakan jalur relatif, itu hanya harus diakhiri dengan sesuatu selain .atau ..:

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

Anda dapat menggunakan jalur absolut:

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

Demikian pula, rmdir .tidak akan pernah berhasil, tetapi rmdir "$PWD"tidak.


Sempurna ... persis jawaban yang kuharapkan.
Nathan Osman

5
Masalah dasarnya adalah Anda tidak diizinkan menghapus atau mengganti nama khusus "." dan nama "..".
Barmar


1

Dan itu tergantung pada bagaimana Anda mendefinisikan "mengubah direktori saat ini".

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

memunculkan subkulit dan mengubah direktori saat ini dalam subkulit, tetapi membiarkan shell utama Anda di tempatnya.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.