อะไรคือ“.” และ“ .. ” ในไดเรกทอรี?


15

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

ในกรณีที่คุณไม่ทราบว่าฉันหมายถึงตัวอย่างใด:

.
..
Su.exe
Sup.txt
SuperUser.COM

คำตอบ:


40

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

ตัวอย่าง:

ขึ้นไป 2 ไดเรกทอรี:

cd ..\..\

หรือบนระบบที่ใช้ UNIX เพื่อรันไบนารีที่รันได้ในไดเร็กทอรีปัจจุบัน:

./program

สคริปต์ UNIX จำนวนมากจะใช้เช่นกัน เพื่อแสดงไดเรกทอรีปัจจุบันเพื่อสแกนหาไฟล์ตัวอย่าง (Perl):

#!/usr/bin/perl

opendir ( DIR, "." ) || die "Error opening current directory\n";
while( ($f = readdir(DIR))){
     print("$f\n");
}
closedir(DIR);

มันสามารถพกพาได้มากกว่าหากคุณต้องการย้ายสคริปต์ไปยังไดเรกทอรีหรือระบบอื่น ๆ เนื่องจากชื่อไดเรกทอรีนั้นไม่ได้เข้ารหัสไว้อย่างหนัก


3
เป็นที่รู้จักกันน้อย แต่บรรทัดคำสั่งของ Windows จะขยายออกไปอีก . = ไดเรกทอรีนี้ .. = ไดเรกทอรีหลัก ... = ไดเรกทอรีหลักของผู้ปกครอง 3 จุดบางครั้งก็มีประโยชน์มากกว่านั้นและมันยากเกินไปที่จะจัดการ
salmonmoose

4
3 จุดไม่ทำงานสำหรับฉันโดยใช้ Vista
Kevin Panko

1
ทั้งฉันบน Windows 7 64 บิต RTM ฟังดูเหมือนเป็นตำนานสำหรับฉัน เกิดอะไรขึ้นกับ .. \ ..
AdamV

2
@salmonmoose: ไม่ได้ผลสำหรับฉันกับ XP เช่นกัน
Simon P Stevens

2
cd ... การทำงานสำหรับฉันบน Windows command98 Windows XP ดูเหมือนจะไม่สนับสนุนมันว่า
Daniel Beck

10

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

จุดเดียว.มีประโยชน์ใน linux ที่คุณต้องการเรียกใช้ปฏิบัติการในไดเรกทอรีปัจจุบันเพื่อให้คุณพิมพ์./a.outเพราะเชลล์คำสั่งโดยค่าเริ่มต้นไม่ได้ค้นหาไดเรกทอรีปัจจุบันสำหรับไฟล์ปฏิบัติการ (เพื่อเหตุผลด้านความปลอดภัย)

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


1
PowerShell ยังไม่รวม ในรายการพา ธ สำหรับค้นหาไฟล์เรียกทำงาน
Joey

วิธีผ่าน '.' เป็นอาร์กิวเมนต์คำสั่งหรือไม่?
แคลคูลัส

@DeFu คุณผ่านจุดเป็นจุดตัวอย่างเช่น:ls .
hasen

ls ทำหน้าที่เหมือนกับls .
แคลคูลัส

@DeFu ดีใช่ แต่เมื่อคุณทำls .คุณจะผ่าน '' เป็นอาร์กิวเมนต์ของ 'ls'; นั่นคือสิ่งที่คุณถาม? มันทำหน้าที่เหมือนกันเพราะโดยปกติแล้วlsจะแสดงรายการไดเรกทอรีปัจจุบันและ.เป็นไดเรกทอรีปัจจุบัน แต่คุณกำลังส่งผ่านไปยังคำสั่งอย่างแน่นอน
hasen

5

การ เป็นไดเรกทอรีปัจจุบัน คุณไม่ค่อยจำเป็นต้องใช้สิ่งนี้ คำสั่งส่วนใหญ่จะถือว่าไดเรกทอรีปัจจุบัน .. เป็นระดับต่อไป นี่เป็นทางลัดที่ค่อนข้างมีประโยชน์ หากคุณอยู่ใน C: \ foo \ bar และคุณต้องการไปที่ C: \ foo \ bar2 คุณสามารถพูดได้

cd ..\bar2

และคุณจะอยู่ใน C: \ foo \ bar2 หากคุณไม่ต้องการไปที่ bar2 แต่ต้องการเรียกใช้ C: \ foo \ bar.exe เท่านั้นคุณสามารถพูดได้

..\bar.exe

หรือ .. \ bar เพื่อเรียกใช้โดยไม่ต้องกลับไปที่ไดเรกทอรีหลัก แน่นอนว่าสิ่งนี้มีประโยชน์มากขึ้นเมื่อคุณเป็นเส้นทางที่ยาวกว่าที่ C: \ foo (เช่น "C: \ Users \ Daniel \ My Dropbox \"


1
ฉันหา . จะค่อนข้างมีประโยชน์ในบางครั้งโดยเฉพาะอย่างยิ่งเมื่อคัดลอกหรือย้ายไฟล์ไปยังตำแหน่งปัจจุบัน ( copy F:\*.foo .) หรืออ้างถึงเป็นอย่างอื่น ( start .เปิด Explorer ในไดเรกทอรีปัจจุบันเป็นต้น)
Joey

3

พวกเขายืนหยัดเพื่อ:

.

dir ปัจจุบัน

.. 

แสดงถึง dir พาเรนต์

ดังนั้นหากคุณมี "su.exe" ที่ปฏิบัติการได้ใน:

  • ตัวแปรสภาพแวดล้อม Path ของคุณ (เช่น C: \ MyExecutables \ su.exe)
  • dir ปัจจุบันของคุณ
  • พ่อแม่ของคุณผบ

คุณสามารถดำเนินการแต่ละคนเช่นนี้:

 su.exe  

ดำเนินการหนึ่งในเส้นทาง

.\su.exe 

ดำเนินการหนึ่งใน dir ปัจจุบัน

..\su.exe

ดำเนินการหนึ่งในผู้ปกครอง dir

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