ฟังก์ชัน Zsh สำหรับแสดง file tree
เวลาไล่ดูไดเรกทอรีบน command line การได้เห็นโครงสร้างของไดเรกทอรีและไดเรกทอรีย่อยในรูปแบบ "tree" มักช่วยได้มาก แม้จะมีเครื่องมือให้เลือกมากมาย เช่น tree แต่บางครั้งคุณอาจอยากได้โซลูชันแบบกำหนดเองง่าย ๆ ที่ผนวกเข้ากับ shell ของคุณโดยตรง ในโพสต์นี้เราจะพาไปสร้างฟังก์ชัน Zsh ง่าย ๆ สำหรับแสดงโครงสร้างของไดเรกทอรีในรูปแบบ tree
สร้างฟังก์ชัน Zsh สำหรับแสดง file tree
ถ้าคุณใช้ Zsh เป็น shell หลัก การเพิ่มฟังก์ชันของตัวเองลงในไฟล์ .zshrc จะช่วยให้คุณมีคำสั่งที่รวดเร็วและมีประสิทธิภาพสำหรับดูไดเรกทอรีในโครงสร้างแบบ tree ฟังก์ชันนี้ทำงานคล้ายกับคำสั่ง tree ยอดนิยม แต่สร้างขึ้นจาก ls และ sed ทำให้ผนวกเข้ากับสภาพแวดล้อม Zsh ของคุณได้ง่าย
ขั้นตอนที่ 1: เพิ่มฟังก์ชัน lst() ลงใน .zshrc
ขั้นแรกคือกำหนดฟังก์ชัน lst() ไว้ในไฟล์ .zshrc ของคุณ ฟังก์ชันนี้รับ argument เสริมหนึ่งตัว ซึ่งเป็น path ของไดเรกทอรีใดก็ได้ แล้วแสดง tree ของไดเรกทอรีโดยเริ่มจากจุดนั้น ถ้าไม่ระบุไดเรกทอรี ค่าเริ่มต้นคือไดเรกทอรีปัจจุบัน
เปิดไฟล์ .zshrc ด้วย text editor ที่คุณถนัด แล้วเพิ่มฟังก์ชันต่อไปนี้:
lst() {
if [ "$1" != "" ] # or better, if [ -n "$1" ]
then
ls -R $1 | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/'
else
ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/'
fi
}
ขั้นตอนที่ 2: โหลดการตั้งค่า Zsh ใหม่
หลังจากเพิ่มฟังก์ชันแล้ว คุณต้องโหลดไฟล์ .zshrc ใหม่เพื่อให้การเปลี่ยนแปลงมีผล โดยรันคำสั่งต่อไปนี้ใน terminal:
sh
source ~/.zshrc
ขั้นตอนที่ 3: การใช้ฟังก์ชัน lst()
เมื่อเพิ่มฟังก์ชันลงใน .zshrc แล้ว คุณก็เริ่มใช้งานได้ทันที ฟังก์ชัน lst() ให้คุณแสดงไดเรกทอรีย่อยทั้งหมดในไดเรกทอรีที่ระบุในรูปแบบ tree วิธีใช้เป็นแบบนี้:
หากต้องการแสดงไดเรกทอรีย่อยของโฟลเดอร์หนึ่ง (เช่น spec) ให้รัน:
sh
lst spec
คำสั่งนี้จะสร้างโครงสร้างคล้าย tree ที่แสดงไดเรกทอรีย่อยทั้งหมดในโฟลเดอร์ spec
ถ้าอยากดูโครงสร้าง tree ของไดเรกทอรีปัจจุบัน ก็แค่รัน:
sh
lst
ฟังก์ชัน lst() จะแสดงโครงสร้างของโฟลเดอร์ออกมา ทำให้เข้าใจลำดับชั้นของไดเรกทอรีได้ง่ายขึ้น
ตัวอย่างผลลัพธ์
สมมติว่าคุณมีโครงสร้างไดเรกทอรีแบบนี้:
bash
spec/
├── controllers/
│ └── users/
├── models/
└── views/
การรันคำสั่ง lst spec จะให้ผลลัพธ์ประมาณนี้:
css
spec
|--controllers
| |--users
|--models
|--views
โครงสร้าง tree ง่าย ๆ แบบนี้ช่วยให้เห็นภาพความสัมพันธ์ระหว่างไดเรกทอรีกับไดเรกทอรีย่อยได้ง่าย
มันทำงานอย่างไร
มาแยกดูการทำงานของฟังก์ชันทีละขั้น:
- ls -R $1: คำสั่ง ls -R แสดงเนื้อหาของไดเรกทอรีแบบ recursive (หรือไดเรกทอรีปัจจุบันถ้าไม่ระบุ argument)
- grep ":$": กรองผลลัพธ์ให้เหลือเฉพาะชื่อไดเรกทอรี (บรรทัดที่ลงท้ายด้วย :)
- คำสั่ง sed:
- 's/:$//': ลบเครื่องหมาย colon ท้ายชื่อไดเรกทอรีแต่ละบรรทัด
- 's/[^-][^/]*//--/g': แทนที่ forward slash (/) ด้วย dash (--) เพื่อแปลงโครงสร้างให้อยู่ในรูปแบบคล้าย tree
- 's/^/ /': เพิ่มการเยื้องให้กับ tree ของไดเรกทอรี
- 's/-/|/': แทนที่ dash ด้วยเครื่องหมาย pipe แนวตั้ง (|) เพื่อให้รูปแบบ tree ชัดขึ้นอีก
ขั้นตอนที่ 4: ปรับแต่งฟังก์ชัน lst()
คุณสามารถปรับแต่งฟังก์ชัน lst() ให้เหมาะกับความต้องการได้ง่าย ๆ ตัวอย่างเช่น เปลี่ยนการจัดรูปแบบของโครงสร้าง tree หรือเพิ่มตัวเลือกอื่นสำหรับแสดงไฟล์ ถ้าคุณต้องแสดงทั้งไฟล์และไดเรกทอรีอยู่บ่อย ๆ ก็ปรับฟังก์ชันให้รวมไฟล์ด้วยได้ โดยเอาตัวกรอง grep ที่แสดงเฉพาะไดเรกทอรีออก
ทางเลือก: ใช้คำสั่ง tree
ถ้าคุณชอบแบบสำเร็จรูป ก็ใช้คำสั่ง tree ซึ่งออกแบบมาเพื่อแสดงโครงสร้างไดเรกทอรีโดยเฉพาะได้ tree เป็น utility ที่หาได้ทั่วไปและติดตั้งได้บนระบบตระกูล Unix ส่วนใหญ่ วิธีติดตั้ง tree ให้ใช้คำสั่งใดคำสั่งหนึ่งต่อไปนี้ตามระบบของคุณ:
บนระบบ Ubuntu หรือตระกูล Debian:
sh
sudo apt-get install tree
บน macOS:
sh
brew install tree
เมื่อติดตั้งแล้ว คุณสามารถใช้คำสั่ง tree เพื่อสร้างผลลัพธ์ในลักษณะเดียวกัน:
sh
tree spec
คำสั่ง tree มีฟีเจอร์ในตัวมากกว่า เช่น ความสามารถในการแสดงขนาดไฟล์ permission และอื่น ๆ อย่างไรก็ตาม ถ้าคุณอยากให้ทุกอย่างเรียบง่าย หรือไม่มี tree ให้ใช้ ฟังก์ชัน lst() ก็เป็นทางเลือกเบา ๆ ที่ยอดเยี่ยม
สรุป
ฟังก์ชัน Zsh ที่เราสร้างขึ้นเป็นวิธีง่ายและมีประสิทธิภาพในการแสดงโครงสร้างไดเรกทอรีในรูปแบบ tree การเพิ่มฟังก์ชัน lst() ลงในไฟล์ .zshrc ช่วยให้คุณเห็นภาพไดเรกทอรีย่อยของโฟลเดอร์ใดก็ได้ในระบบอย่างรวดเร็ว ซึ่งมีประโยชน์มากสำหรับการไล่ดูโครงสร้างไดเรกทอรีที่ซับซ้อน และการทำความเข้าใจลำดับชั้นของไฟล์และโฟลเดอร์ในโปรเจกต์ของคุณ
ถ้าคุณต้องการความสามารถที่มากกว่านี้ ลองพิจารณาใช้คำสั่ง tree เพื่อฟีเจอร์ขั้นสูงเพิ่มเติม แต่สำหรับโซลูชันแบบกำหนดเองที่เบาและผนวกเข้ากับ Zsh shell ของคุณโดยตรง ฟังก์ชัน lst() คือตัวเลือกที่ลงตัว
คำถามที่พบบ่อย
1. ฟังก์ชัน lst() ใช้ทำอะไร?
ฟังก์ชัน lst() คือฟังก์ชัน Zsh ที่เขียนขึ้นเองเพื่อแสดงโครงสร้างไดเรกทอรีในรูปแบบ tree มันใช้ ls และ sed จัดรูปแบบผลลัพธ์ ทำให้เห็นภาพลำดับชั้นของโฟลเดอร์ได้โดยตรงใน terminal
2. จะเพิ่มฟังก์ชัน lst() ลงในการตั้งค่า Zsh ได้อย่างไร?
คุณเพิ่มฟังก์ชัน lst() ได้โดยแก้ไขไฟล์ .zshrc แล้ววางนิยามของฟังก์ชันลงไปในไฟล์ จากนั้นรัน source ~/.zshrc เพื่อโหลดการตั้งค่าใหม่และทำให้ฟังก์ชันพร้อมใช้งาน
3. ปรับแต่งผลลัพธ์ของฟังก์ชัน lst() ได้ไหม?
ได้ คุณปรับแต่งฟังก์ชันได้โดยแก้คำสั่ง sed ที่ใช้จัดรูปแบบผลลัพธ์ จะเปลี่ยนโครงสร้าง tree เพิ่มรายละเอียด หรือรวมไฟล์ในการแสดงผลด้วยก็ได้
4. มีทางเลือกอื่นแทนการใช้ฟังก์ชัน lst() ไหม?
คำสั่ง tree เป็น utility ที่หาได้ทั่วไปซึ่งแสดงโครงสร้างไดเรกทอรีในรูปแบบ tree มันมีฟีเจอร์มากกว่าฟังก์ชัน lst() และติดตั้งได้บนระบบตระกูล Unix ส่วนใหญ่
5. ใช้ฟังก์ชัน lst() บนระบบอื่นที่ไม่ใช่ Zsh ได้ไหม?
ฟังก์ชัน lst() เขียนมาสำหรับ Zsh แต่ปรับใช้กับ shell อื่นอย่าง Bash ได้ง่าย โดยเพิ่มลงในไฟล์ตั้งค่าที่เหมาะสม (.bashrc สำหรับ Bash)
การผนวกฟังก์ชัน lst() เข้ากับ workflow ของ Zsh จะช่วยยกระดับประสบการณ์ command line ของคุณ และทำให้การไล่ดูไดเรกทอรีง่ายขึ้นมาก