จะเปลี่ยนชื่อไฟล์เป็น .. (dot dot) ได้อย่างไร?


26

เห็นได้ชัดว่าคุณสามารถเปลี่ยนชื่อไฟล์...

ถ้าฉันบ้าฉันจะเปลี่ยนชื่อไฟล์เป็น..หรือ.อย่างไร ชื่อไฟล์ดังกล่าวได้รับอนุญาตหรือไม่

Backslash ดูเหมือนจะไม่ปิดการใช้งานความหมายพิเศษของจุด:

$ mv test \.
mv: `test' and `./test' are the same file

11
.และ..มีอยู่แล้ว และจุดไม่มีความหมายพิเศษ
ctrl-alt-delor

2
ฉันสงสัยว่าคุณสามารถสร้างไฟล์ชื่อ.หรือ..จาก Windows ไปยังภายนอกFATหรือNTFSสื่อได้หรือไม่ลองเชื่อมต่อเข้ากับระบบที่ใช้ Unix หืม ...
IQAndreas

3
@IQAndreas ไม่เช่นนั้น Windows จะใช้ และ .. เกี่ยวกับวิธีเดียวกัน ( superuser.com/a/571364/330318 ) เหมือนกับที่ Unix ทำ (และยังมีชื่อพิเศษอื่น ๆ อีกมากมาย: superuser.com/a/217526/330318 )
PTwr

2
@PTwr เรื่อง windows เป็นเรื่องยากกว่านั้น สิ่งพิเศษบางอย่างเกิดขึ้นที่ระดับระบบไฟล์ / ระดับ API ของ API, บางอย่างในระบบย่อย Win32 และบางอย่างและระดับเชลล์ ตัวอย่างเช่นเวทมนตร์ GUID จากลิงก์ที่สองของคุณอยู่ที่ระดับเชลล์ดังนั้นคุณจะไม่เห็นมันในแอปพลิเคชันบรรทัดคำสั่งทั่วไป ฉันไม่แน่ใจว่า.และ..จริง ๆ แล้วมีอยู่ใน NTFS และ NT API หรือหากมีการเพิ่มโดย Win32 API เท่านั้น ฉันรู้ว่ามีความแตกต่างหลายอย่างระหว่าง NT API ระดับล่างและ Win32 เช่น Win32 ซ่อนไฟล์หลายไฟล์จากไดรฟ์ราก
CodesInChaos

@CodesInChaos เท่าที่ฉันรู้ว่า dot / dotdot เป็นอินสแตนซ์เสมือนจริงและถูกจำลองในไดรเวอร์ระบบไฟล์และมันก็เป็นเช่นเดียวกันใน FAT เก่าที่ยืมแนวคิด( มีปัญหา ) จาก Unix ตามลิงก์ต่อวินาทีฉันยอมรับว่าไม่ได้อ่านอย่างเต็มที่ก่อนโพสต์ บางอย่างเช่นนี้อาจจะดีกว่า (แต่อีกครั้งอันนี้ขาดข้อมูล. / .. เต็ม)
PTwr

คำตอบ:


25

.. ไม่พิเศษมันเป็นเพียงแค่ว่ามันมีอยู่แล้ว

บน Unix, Dos และ MS-Windows ทุก ๆ ไดเรกทอรีจะมีไดเร็กทอรีที่.เชื่อมโยงกลับไปยังตัวมันเองและไดเรกทอรีที่..มันลิงก์ไปยังไดเรกทอรีหลักของมัน (หรือตัวเองถ้าไดเรกทอรีราก)

หาก..และ.เป็นพิเศษมันเป็นเพียงเพราะคุณไม่สามารถลบพวกเขา (ที่จริงคุณสามารถคุณเพียงแค่ลบไดเรกทอรีที่มีพวกเขา)

ดังนั้นคุณจะไม่สามารถตั้งชื่อใด ๆ (อื่น ๆ ) ไฟล์หรือ...

แต่คุณสามารถสร้างไฟล์..., \, , .. (หมายเหตุมีช่องว่างหลัง..แต่คุณแทบจะไม่สามารถดูได้ที่นี่หรือที่คุณได้อย่างง่ายดายในรายการไดเรกทอรี) หรือชื่ออื่น ๆ ที่คุณชอบ; เพียงตัวละครลิขสิทธิ์เป็น/(คำเตือน - รายละเอียดขั้นสูงและ null, null เป็นตัวละครพิเศษไม่ได้ใช้อะไรเลยนอกจากการทำเครื่องหมายจุดสิ้นสุดของสิ่งและบางครั้งก็เป็นตัวคั่น) .ไม่มีความหมายพิเศษ: ไม่ให้ชื่อไฟล์เคอร์เนลหรือเปลือกมันไม่จำเป็นต้องหลบหนี จริงๆแล้วถ้าชื่อไฟล์เริ่มต้นด้วย.มันเป็นพิเศษไฟล์จะถูกซ่อนตามปกติ แต่ก็ยังไม่จำเป็นต้องหลบหนี

นอกเหนือ

พฤติกรรมของไฟล์ที่ซ่อนอยู่นี้มาเกี่ยวกับในการดำเนินการเริ่มต้นของการlsที่ผู้เขียนอยากจะซ่อน.และ..เพื่อให้พวกเขาเขียนรหัสเพื่อซ่อนไฟล์ใด ๆ .ที่เริ่มต้นด้วย ผู้ใช้รายอื่นสังเกตเห็นข้อผิดพลาด / คุณสมบัตินี้และเริ่มสร้างไฟล์ที่เริ่มต้นด้วย.เมื่อพวกเขาต้องการให้ซ่อนไฟล์

คำอธิบายของคำถามที่เชื่อมโยง

ในคำถามที่คุณเชื่อมโยงไปยังผู้ถามกำลังพยายามย้ายไฟล์ไปยังไดเรกทอรีหลัก..แต่จบลงด้วยการเปลี่ยนชื่อ...ไฟล์ที่ขึ้นต้นด้วยจุดนั้นจะถูกซ่อนไว้เป็นค่าเริ่มต้นนั่นคือสาเหตุที่พวกเขาไม่สามารถหามันได้

เมื่อใช้ mv ในรูปแบบ mv a b

  • หากคุณย้ายไปที่.นี่เป็นการใช้งานที่ไม่มีประสิทธิภาพ แต่mvถือว่าเป็นข้อผิดพลาด
  • หากคุณย้ายไป..ที่ไฟล์นั้นจะเป็นการย้ายไฟล์ไปยังไดเรกทอรีหลัก

1
คุณหมายถึงIf you move to . it is effectively a no operationอะไร ไม่ใช่ "no op" มันเป็นข้อผิดพลาดถ้าคุณพยายามย้ายไฟล์จาก A ถึง B เมื่อ A และ B เป็นสิ่งเดียวกัน การสาธิตการปฏิบัติมากขึ้นของข้อผิดพลาดนี้หรือmv foo ../some_dir/foo mv foo some_subdir/../foo
Brandin

7
สำหรับคำจำกัดความของ 'อักขระ' NUL (0x00) จะถูก จำกัด ด้วยการใช้ในชื่อไฟล์และไดเรกทอรี
user117529

1
ความแตกต่างระหว่างอักขระที่สงวนไว้ (เช่น/และ NUL) และชื่อที่สงวนไว้ (เช่น.และ..) สามารถทำให้ชัดเจนยิ่งขึ้น นอกจากนี้ยังเป็นการชี้ให้เห็นว่า.เมื่อเริ่มต้นชื่อมีความหมายพิเศษเฉพาะที่ชั้นแอปพลิเคชันเท่านั้นและไม่ได้อยู่ในเคอร์เนลหรือการเรียกระบบ API
kasperd

ฉันคิดว่าอวกาศของคุณหายไป
nyuszika7h

1
..และ. มีความพิเศษ: คุณไม่สามารถย้ายหรือลบออก แต่พวกเขาไม่ได้พิเศษเมื่อย้ายไฟล์ไปยังพวกเขา
reinierpost

52

คุณไม่สามารถเปลี่ยนชื่อไฟล์เป็น.หรือ..เพราะไดเรกทอรีทั้งหมดมีรายการสำหรับสองชื่อเหล่านั้น (รายการเหล่านั้นชี้ไปที่ไดเรกทอรีและคุณไม่สามารถเปลี่ยนชื่อไฟล์เป็นไดเรกทอรีได้)

mv ตรวจสอบกรณีที่ปลายทางเป็นไดเรกทอรีที่มีอยู่และตีความมันเป็นคำขอย้ายไฟล์ไปยังไดเรกทอรีนั้น (ใช้ชื่อปัจจุบัน)

แบ็กสแลชไม่มีส่วนเกี่ยวข้องกับสิ่งนี้เพราะ.ไม่ใช่เมตาอักขระของเชลล์ \.และเป็นเหมือนกัน.bash


9

ปัญหาคือคุณกำลังย้ายไฟล์ไปยังไดเรกทอรี สิ่งนี้ได้รับอนุญาตให้ล้มเหลว

ฉันจะบอกคุณว่าครั้งหนึ่งมันเคยเป็น

mkdir เคยอ่านนี่เป็นหลัก (ในขณะที่ฉันกำลังเขียนใน sh มันเขียนจริงใน C และ setuid-root)

mknod d $1
ln -d $1 $1/.
ln -d `dirname $1` $1/..

อย่างที่คุณเห็นไม่มีอะไรพิเศษเกี่ยวกับ และ .. ยกเว้นความจริงที่ถูกสร้างขึ้นสำหรับคุณโดย mkdir และมีอยู่แล้ว ตอนนี้มีรหัสที่บอกว่าคุณไม่สามารถลบได้ แต่มันก็ไม่ได้เป็นเช่นนั้นเสมอไป

rmdir เคยเป็นแบบนี้:

rm -d $1/..
rm -d $1/.
rm -d $1

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