ทางลัดของ Commandline สำหรับไดเรกทอรีปัจจุบันคล้ายกับ ~ สำหรับโฮมไดเรกทอรีหรือไม่


24

เมื่อฉันใช้คำสั่ง cp หรือย้ายในหน้าต่างเทอร์มินัลตอนนี้ฉันกำลังทุบตีในบางโฟลเดอร์เช่นนี้

NES@server:~/Desktop/dir1$

และตอนนี้ฉันต้องการคัดลอกไฟล์จากที่นี่~/anotherdir/dir2ไปยังโฟลเดอร์ที่เลือกปัจจุบันใน bash (dir1) ฉันจะใช้คำสั่ง

cp ~/anotherdir/dir2/file ~/Desktop/dir1

สตริงทางลัดมีอยู่เพื่ออ้างถึงไดเรกทอรีที่เลือกในปัจจุบันหรือไม่ ดังนั้นในตัวอย่างนี้ฉันไม่ต้องให้เส้นทางแบบเต็มไปยังเป้าหมาย dir แต่คำสั่งรู้ว่ามันควรใช้ไดเรกทอรีที่เลือกปัจจุบันในทุบตี? เช่น ~ หมายถึงไดเรกทอรีบ้าน?

คำตอบ:


42

.ไดเรกทอรีปัจจุบันของคุณคือ ดังนั้นcp /foo/fam/foo .คัดลอกไฟล์ไปยังไดเรกทอรีปัจจุบันของคุณ

การก่อสร้างคล้ายคลึงสำหรับ "หนึ่งไดเรกทอรีขึ้น" ..หรือไดเรกทอรีหลักของไดเรกทอรีที่ทำงานปัจจุบันของคุณเป็นจุดสองจุดคือ (ขอบคุณ @djeikyb)

ดังนั้นจาก/usr/house/firstfloor/basementซีดีที่จะนำคุณหนึ่งระดับขึ้นไป ../usr/house/firstfloor

ในตัวอย่างเดียวกัน (เริ่มต้นจาก/usr/house/firstfloor/basementคำสั่งที่จะพาคุณไปcd ../../usr/house

นอกจากนี้คุณยังสามารถใช้$PWDกับการechoที่จะได้รับไดเรกทอรีปัจจุบันของคุณ:

echo $PWD

อนึ่ง$OLDPWDจะให้ไดเรกทอรีก่อนหน้าของคุณ (ซึ่งbashคุณสามารถเข้าถึงได้ด้วยการพิมพ์cd -)


3
ขอเวลาในการเรียนรู้ซึ่ง..หมายถึงหนึ่งไดเรกทอรีที่ต่ำกว่า สามารถใช้ได้หลายครั้งเช่นcd ../..
djeikyb

1
@djeikyb - คุณหมายถึงข้างต้นฉันแน่ใจ ดังนั้น cd ..จะนำคุณไปยังไดเรกทอรีหลักของไดเรกทอรีปัจจุบันของคุณ จุดดี.
belacqua

1
และผมจะพูดถึงpopdและpushdแต่ที่กลายเป็นเรียงความ
belacqua

2
ข้อแตกต่างเล็ก ๆ น้อย ๆ ที่ควรจดจำ: .และ..เป็นระดับระบบไฟล์ดังนั้นโปรแกรมใด ๆ ก็ตามจะยอมรับได้ ในทางกลับกันทางลัดเช่น~และ~-เป็นส่วนหนึ่งของเปลือก
grawity

2
+1 สำหรับcd -; ไม่รู้ว่ามันมีอยู่จริง
jg-faustus

6

คุณสามารถใช้ $ (pwd) ได้มันจะแก้ไขผลลัพธ์จากคำสั่ง pwd

ตัวอย่าง:

echo $(pwd)

1
echo $PWDหรือเพียงแค่
ulidtko

3

./แสดงถึงไดเรกทอรีปัจจุบัน ดังนั้นคุณสามารถใช้คำสั่งcp ~/anotherdir/dir2/file ./นี้จะคัดลอกไฟล์ "ไฟล์" ลงในไดเรกทอรีการทำงานที่ถูกต้อง


3
คุณไม่ต้องการเครื่องหมายทับ "" ก็เพียงพอแล้ว slash (ในฐานะที่เป็นองค์ประกอบของตัวคั่นเส้นทาง) เป็นสิ่งจำเป็นเฉพาะถ้าคุณต้องการที่จะวางองค์ประกอบเส้นทางอื่น ๆ หลังจากนั้นมันก็จะง่ายกว่าที่จะเหลือเพียง. / เนื่องจากเส้นทางสัมพัทธ์มีความหมายเริ่มต้นด้วยไดเรกทอรีปัจจุบันต่อไป :)
LGB

ฉันรู้ / ไม่จำเป็น แต่ อยู่คนเดียวรู้สึกสับสนกับฉันเพราะ ยังใช้เพื่อเรียกใช้คำสั่งจากไฟล์ในเชลล์ปัจจุบันเช่น ". envsetup.sh" ดังนั้นการเพิ่ม a / at ท้ายทำให้ชัดเจนยิ่งขึ้น
binW

1
หากคุณln -s /some/long/path/to/get/to/cake ไม่มีอาร์กิวเมนต์ที่สองมันจะใส่cakeลิงค์สัญลักษณ์ในปัจจุบันของคุณโดยตรง ดีมากสำหรับคนขี้เกียจ .บันทึก
belacqua

2

หากต้องการใช้ไดเรกทอรีปัจจุบันเป็นไดเรกทอรีปลายทางให้ใช้จุดเดียว ' .'

คำตอบยาว ๆ

ใช้ตัวอย่างของคุณคุณจะพิมพ์: cp ~/anotherdir/dir2/file .

หากต้องการดูจุด., ..และ../../ชื่อไดเรกทอรีในการดำเนินการคัดลอกและวางคำสั่งต่อไปนี้ลง terminal ของคุณ:

mkdir a && mkdir a/b && mkdir a/b/c && mkdir a/b/c2
cd a/b/c
cp /etc/default/grub .
cp /etc/default/grub ..
cp /etc/default/grub ../c2
cd ../../
tree

เอาต์พุตจากคำสั่ง tree ปรากฏดังนี้:

.
└── b
    ├── c
       └── grub
    ├── c2
       └── grub
    └── grub

3 directories, 3 files

.ที่ด้านบนของการส่งออกต้นไม้หมายถึงไดเรกทอรีปัจจุบันใหม่a ซึ่งเป็นปู่ย่าตายายของa/b/cที่เราสำรวจจากการใช้cd ../../คำสั่ง ภายใต้aเราเห็นไดเรกทอรีย่อยa/b,a/b/cและa/b/c2

การวิเคราะห์รายบรรทัด

ก่อนอื่นเราสร้าง 4 ไดเรกทอรีในหนึ่งบรรทัดโดยใช้&&เพื่อรวมหลายบรรทัดเข้าด้วยกัน

จากนั้นเราเปลี่ยนเป็นไดเรกทอรีa/b/cซึ่งเป็นไดเรกทอรีปัจจุบันสำหรับคำสั่งคัดลอกต่อไปนี้:

  • ในคำสั่ง copy แรก ( cp) เรากำหนดปลายทางไปยังไดเรกทอรีปัจจุบันของเรา ( C ) .ด้วย
  • ในคำสั่งการคัดลอกที่สองเรากำหนดปลายทางไปยังไดเรกทอรีหลัก ( ) ..ด้วย
  • ในคำสั่ง copy ที่สามเราตั้งค่าปลายทางเป็น sibling directory ( c2) ) ด้วย../c2

จากนั้นตามที่ระบุไว้ก่อนหน้านี้เราเปลี่ยนไดเรกทอรีปัจจุบันเป็นaและเรียกใช้treeaคำสั่งเพื่อแสดงไดเรกทอรีและไฟล์ทั้งหมดภายใต้

ทำความสะอาด

หลังจากเสร็จแล้วเราจะลบสามไดเรกทอรีและไฟล์ด้วย:

cd ~/
rm -r tree


1

คุณสามารถใช้จุด ( .) ที่~+ ขยายตัวหนอนที่pwdคำสั่งหรือตัวแปร $ PWD เพื่อเป็นตัวแทนของไดเรกทอรีการทำงานปัจจุบัน (CWD) คำสั่งทั้งหมดเหล่านี้สามารถทำได้:

  1. mv file_old_dir .
  2. mv file_old_dir ~+
  3. mv file_old_dir $(pwd)
  4. mv file_old_dir $PWD

0

ใช่ (ตามที่คนอื่น ๆ ระบุไว้) ไดเรกทอรีปัจจุบันคือ "." นั่นคือสาเหตุที่คุณสามารถเริ่มโปรแกรม / สคริปต์จากไดเรกทอรีปัจจุบันด้วย. / สคริปต์ (สคริปต์เพียงแค่จะไม่ทำงานยกเว้น. ไม่ใช่ส่วนหนึ่งของ PATH ซึ่งไม่แนะนำ แม้ว่า) การใช้ $ PWD หรือ $ (pwd) นั้นเกินความจริงเล็กน้อยแม้ว่าคนอื่น ๆ จะพูดถึงว่าการใช้อักขระจุดเดียวสั้นกว่าแน่นอน :) ".. " เป็นไดเรกทอรีหลักแน่นอนว่า "/" เป็นรูท นอกจากนี้ยังมีการกล่าวถึงว่า "cd -" จะทำให้คุณอยู่ในไดเรกทอรีก่อนหน้าซึ่งคุณเคยเปลี่ยน cwd (ไดเรกทอรีทำงานปัจจุบัน) มันยังมีประโยชน์ในการทำงานประจำวัน คำสั่ง "cd" เดียวโดยไม่มีคำสั่งอื่นในบรรทัดคำสั่งจะนำคุณเข้าสู่ "~" (บ้านของคุณ)


1
$PWDไม่ใช่ overkill เมื่อสร้าง symlink ไปยังพา ธ สัมบูรณ์
ulidtko

ฉันคิดถึงตัวอย่าง "cp" ซึ่งเป็นที่แน่นอน แม้ว่า symlink จะขึ้นอยู่กับสถานการณ์: "ln -s / this / file" จะสร้าง symlink ในไฟล์ชี้ไดเรกทอรีปัจจุบัน / นี้ / ไฟล์ที่มีชื่อ "ไฟล์" (คนมักจะคิดว่ามันเหมือนกับ "cp" เพียงไม่คัดลอกข้อมูลลิงค์บางชนิดเท่านั้น: มันไม่ใช่คำจำกัดความที่ถูกต้อง แต่เป็นการเริ่มต้นที่ดี ) อย่างไรก็ตามโครงสร้างที่ตรงกันข้าม: "ln -s. / this / dir" ค่อนข้างน่าสนใจ (สร้าง symlink เป็น / this / dir ที่มีการอ้างอิงสำหรับไดเรกทอรีปัจจุบัน) แต่ฉันคิดว่ามันอยู่นอกขอบเขตของหัวข้อดั้งเดิม และมันก็ไม่ใช่คำถามเช่นกัน
LGB
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.