bash: cd ไปยังไดเร็กทอรีย่อยที่แก้ไขล่าสุด


10

สงสัยว่ามีวิธีที่ง่ายและ / หรือพกพาในการพูดว่า "เปลี่ยนเป็นไดเรกทอรีย่อยที่แก้ไขล่าสุด" ฉันสามารถใช้ ls และ awk แต่อาจมีวิธีที่ดีกว่า

cd $( ls -ltrd */ | tail -1 | awk '{ print $8 }' )

ฉันต้องเรียกใช้คำสั่งในไดเรกทอรี "ไฟล์เอาต์พุต" ที่มีไดเรกทอรีย่อยหลายร้อยรายการและ 99% ของเวลาที่ฉันต้องการไปยังไดเรกทอรีที่เปลี่ยนแปลงล่าสุด ฉันไม่รู้ว่าชื่อของไดเรกทอรีจะเป็นอะไรล่วงหน้า


1
ทำไมไม่cd $(ls -v1td */ | head -1)?
Pablo Castellazzi

จุดดี ... ฉันไม่เป็นที่คุ้นเคยกับตัวเลือกคำสั่ง ls เท่าที่ฉันควรจะ ...
twblamer

คำตอบ:


13

สมมติว่าไดเรกทอรีของคุณไม่มีอักขระที่ไม่สามารถพิมพ์ได้:

cd  "$(\ls -1dt ./*/ | head -n 1)"

(โปรดทราบว่ามันจะพิจารณาลิงก์ไปยังไดเรกทอรีด้วย)

หากคุณไม่รังเกียจที่จะเปลี่ยนเป็น zsh:

cd ./*(/om[1])

หรือเพื่อรวม symlink ไปยังไดเรกทอรีเช่นในตัวอย่างแรก:

cd ./*(-/om[1])

0

สนุก.

cdd(){ 
  # cd into the last directory modified/created in pwd
   ls -p | grep / | tail -1 | pbcopy; str=$(pbpaste); cd $str
}

ทำไมต้องใส่ชื่อไดเรกทอรีในคลิปบอร์ด นอกจากนี้จะเกิดอะไรขึ้นถ้าชื่อไดเรกทอรีมีช่องว่าง - เกิดขึ้นบ่อยครั้งในทุกวันนี้
roaima

การใช้คลิปบอร์ดช่วยให้การดำเนินการเพิ่มเติมง่ายขึ้นหากคุณต้องการ
jasonleonhard

หากคุณต้องการคุณสามารถเพิ่มเขตข้อมูลเพิ่มเติมได้ง่าย ๆ แทน {print $ 9} คุณสามารถใช้ {print $ 9, $ 10, $ 11} ได้มากเท่าที่คุณต้องการ
jasonleonhard

ฉันได้แก้ไขคำตอบสำหรับบัญชี white space แล้ว
jasonleonhard

นี่คือคำอธิบายคร่าวๆ: explainshell.com/...
jasonleonhard

-1

ลองใช้คำสั่งแบบย่อรุ่นนี้

cd $(ls -t | head -n 1)   

ที่ทำงานเฉพาะในกรณีที่ไฟล์ที่ถูกแก้ไขมากที่สุดเมื่อเร็ว ๆ นี้ในไดเรกทอรีปัจจุบันเป็นประเภทไดเรกทอรี (หรือ symlink ไป directory) และชื่อไม่ได้มีช่องว่างหรือสัญลักษณ์หรือการขึ้นบรรทัดใหม่และไม่ได้เริ่มต้นด้วย - ดังนั้นจึงแทบจะไม่ปรับปรุงกว่า คำตอบที่ยอมรับแล้ว
Stéphane Chazelas
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.