แยกชื่อไฟล์และนามสกุลใน Bash

บทนำ

มีสาเหตุหลายประการที่คุณอาจต้องการแยกชื่อไฟล์และนามสกุลของไฟล์ใน Bash:

  • เพื่อจัดการชื่อไฟล์หรือนามสกุล – คุณอาจต้องการแยกชื่อไฟล์หรือนามสกุลเพื่อแก้ไข เช่น เพิ่มคำนำหน้าหรือส่วนต่อท้ายชื่อไฟล์ หรือเปลี่ยนนามสกุลไฟล์

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

  • เพื่อใช้ชื่อไฟล์หรือนามสกุลในสคริปต์หรือคำสั่ง – คุณอาจต้องการแตกชื่อไฟล์หรือนามสกุลเพื่อใช้เป็นอาร์กิวเมนต์หรืออินพุตสำหรับสคริปต์หรือคำสั่ง เช่น เพื่อส่งต่อไปยังโปรแกรม หรือเพื่อสร้างไฟล์ที่มีชื่อเดียวกันกับไดเร็กทอรี

  • เพื่อดึงข้อมูลจากชื่อไฟล์หรือนามสกุล – คุณอาจต้องการแยกชื่อไฟล์หรือนามสกุลเพื่อดึงข้อมูลออกมา เช่น วันที่หรือประเภทไฟล์

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

วิธีที่ 1: การใช้ ชื่อฐาน คำสั่ง

พื้นที่ basename คำสั่งสามารถใช้เพื่อแยกชื่อไฟล์และนามสกุลออกจากเส้นทางไฟล์:

filename=$(basename /path/to/file.txt)
echo $filename

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

นอกจากนี้คุณยังสามารถใช้ dirname คำสั่งเพื่อแยกเส้นทางไดเร็กทอรีแยกกัน:

directory=$(dirname /path/to/file.txt)
echo $directory

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

วิธีที่ 2: การใช้การขยายพารามิเตอร์

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

filepath="/path/to/file.txt"
filename=${filepath##*/}
echo $filename

คุณยังสามารถใช้การขยายพารามิเตอร์เพื่อแยกส่วนขยายแยกกันได้:

extension=${filename##*.}
echo $extension

จุดเด่น:
  • เรามีความยืดหยุ่น
  • แยกได้ทั้งชื่อไฟล์และนามสกุลแยกกัน
  • จัดการชื่อไฟล์ด้วยการเว้นวรรคอย่างถูกต้อง
จุดด้อย:
  • ต้องมีตัวแปรเพื่อจัดเก็บเส้นทางของไฟล์

วิธีที่ 3: การใช้ awk คำสั่ง

พื้นที่ awk command เป็นเครื่องมือประมวลผลข้อความที่ทรงพลังที่สามารถใช้เพื่อแยกส่วนของสตริง ตัวอย่างเช่น คุณสามารถใช้ไวยากรณ์ต่อไปนี้เพื่อแยกชื่อไฟล์และนามสกุลออกจากเส้นทางของไฟล์:

filepath="/path/to/file.txt"
filename=$(echo $filepath | awk -F/ '{print $NF}')
echo $filename

ดูคู่มือเชิงปฏิบัติสำหรับการเรียนรู้ Git ที่มีแนวทางปฏิบัติที่ดีที่สุด มาตรฐานที่ยอมรับในอุตสาหกรรม และเอกสารสรุปรวม หยุดคำสั่ง Googling Git และจริงๆ แล้ว เรียน มัน!

คุณยังสามารถใช้ awk เพื่อแยกส่วนขยายแยกกัน:

extension=$(echo $filename | awk -F. '{print $NF}')
echo $extension

จุดเด่น:
  • มีอำนาจ
  • สามารถแตกได้ทั้งชื่อไฟล์และนามสกุลแยกกัน
  • จัดการชื่อไฟล์ด้วยการเว้นวรรคอย่างถูกต้อง
จุดด้อย:
  • ไวยากรณ์อาจไม่คุ้นเคยสำหรับผู้ใช้บางคน
  • ต้องมีการวางเส้นทางของไฟล์ผ่าน awk

สรุป

โดยรวมแล้ว การแยกชื่อไฟล์และนามสกุลของไฟล์ใน Bash อาจเป็นเทคนิคที่มีประโยชน์สำหรับการทำงานกับไฟล์และการทำงานต่างๆ ใน ​​Bash Shell

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

ประทับเวลา:

เพิ่มเติมจาก สแต็ค