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.

Nathan Osman
sumber

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.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Sempurna ... persis jawaban yang kuharapkan.
Nathan Osman
5
Masalah dasarnya adalah Anda tidak diizinkan menghapus atau mengganti nama khusus "." dan nama "..".
Barmar
2

Seperti dalam jawaban @Gilles tetapi menggunakan ekspansi brace untuk singkatnya:

mv ../{test,test2}
robstarbuck
sumber
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.

G-Man Mengatakan 'Reinstate Monica'
sumber