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