เปลี่ยนชื่อไดเรกทอรีปัจจุบันจากเปลือก - เป็นไปได้?


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
ปัญหาพื้นฐานคือคุณไม่ได้รับอนุญาตให้ลบหรือเปลี่ยนชื่อ "พิเศษ" และชื่อ ".. "
Barmar


1

และขึ้นอยู่กับวิธีที่คุณกำหนด“ เปลี่ยนไดเรกทอรีปัจจุบัน”

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

วางไข่ subshell และเปลี่ยนไดเรกทอรีปัจจุบันใน subshell แต่ทิ้งเปลือกหลักของคุณไว้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.