อ่านชื่อไฟล์โดยไม่มีนามสกุลใน Bash

Read Filename Without Extension Bash



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

ใช้คำสั่ง `basename` เพื่ออ่านชื่อไฟล์

คำสั่ง `basename` ใช้เพื่ออ่านชื่อไฟล์โดยไม่มีนามสกุลจากไดเร็กทอรีหรือพาธไฟล์







ไวยากรณ์:



ชื่อฐานชื่อ[คำต่อท้าย]

หรือ



ชื่อฐานตัวเลือก...ชื่อ...

ที่นี่ NAME สามารถมีชื่อไฟล์หรือชื่อไฟล์ที่มีเส้นทางแบบเต็ม SUFFIX เป็นทางเลือก และมีส่วนขยายไฟล์ที่ผู้ใช้ต้องการลบ คำสั่ง `basename` มีตัวเลือกบางอย่างที่อธิบายไว้ด้านล่าง





ตัวเลือก

ชื่อ คำอธิบาย
-ถึง ใช้สำหรับส่งชื่อไฟล์หลายชื่อที่มีพาธหรือไม่มีพาธเป็นอาร์กิวเมนต์คำสั่ง
-NS ใช้สำหรับส่งนามสกุลเป็นส่วนต่อท้ายที่ต้องลบ
-กับ ใช้เพื่อแสดงชื่อไฟล์หลายไฟล์โดยแยกแต่ละไฟล์เป็นค่า null
-ช่วย ใช้เพื่อแสดงข้อมูลการใช้คำสั่ง `basename`
–รุ่น ใช้เพื่อแสดงข้อมูลรุ่น

ตัวอย่างที่ 1: การใช้ NAME และ SUFFIX

คำสั่ง `basename` ต่อไปนี้จะดึงชื่อไฟล์ที่มีนามสกุล SUFFIX ถูกละเว้นจากคำสั่งนี้ ที่นี่ผลลัพธ์คือ 'product.txt' .



$ชื่อฐาน /บ้าน/ฟามิดา/รหัส/product.txt

หากคุณต้องการดึงชื่อไฟล์โดยไม่มีนามสกุล คุณต้องระบุนามสกุลไฟล์เป็น SUFFIX ด้วยคำสั่ง 'basename' ในที่นี้ นามสกุลคือ .txt เรียกใช้คำสั่งต่อไปนี้เพื่อลบส่วนขยายออกจากไฟล์

$ชื่อฐาน /บ้าน/ฟามิดา/รหัส/product.txt .txt

ตัวอย่างที่ 2: การใช้ตัวเลือก '-a' และ NAME

ตัวอย่างการใช้ตัวเลือก '-a' ของคำสั่ง 'basename' ที่นี่ สองเส้นทางของไฟล์จะถูกส่งเป็นอาร์กิวเมนต์ด้วยคำสั่ง `basename' แต่ละชื่อไฟล์ที่มีนามสกุลจะดึงมาจากเส้นทางและพิมพ์โดยขึ้นบรรทัดใหม่

$ชื่อฐาน -ถึง /บ้าน/ฟามิดา/index.html/บ้าน/ฟามิดา/รหัส/emp.txt

ตัวอย่างที่ 3: การใช้ตัวเลือก '-z' และ NAME

ตัวเลือก '-z' ใช้กับคำสั่ง 'basename' เพื่อพิมพ์ชื่อไฟล์หลายชื่อด้วยค่า null แทนการขึ้นบรรทัดใหม่ คำสั่งต่อไปนี้ใช้สองตัวเลือกร่วมกันคือ '-a' และ '-z' ที่นี่สองชื่อไฟล์ index.html และ emp.txt จะพิมพ์โดยไม่มีช่องว่างหรือขึ้นบรรทัดใหม่

$ชื่อฐาน -NS /บ้าน/ฟามิดา/index.html/บ้าน/ฟามิดา/รหัส/emp.txt

ตัวอย่างที่ 4: การใช้ตัวเลือก '-s' และ NAME

คำสั่งต่อไปนี้สามารถใช้แทน SUFFIX ด้วย `basename' นามสกุลไฟล์ต้องผ่านตัวเลือก '-sh' เพื่อลบนามสกุลไฟล์ออกจากไฟล์ ตัวอย่างต่อไปนี้จะลบนามสกุล '-sh' ออกจากไฟล์ 'addition.sh'

$ชื่อฐาน -NS.sh เพิ่ม.sh

ตัวอย่างที่-5: ลบนามสกุลไฟล์โดยไม่มี SUFFIX

หากคุณไม่ทราบนามสกุลของไฟล์ที่คุณต้องการลบออกจากชื่อไฟล์ ตัวอย่างนี้จะช่วยคุณแก้ปัญหา สร้างไฟล์ชื่อ read_file.sh ด้วยรหัสต่อไปนี้เพื่อดึงชื่อไฟล์ของนามสกุลใด ๆ คำสั่ง `sed` ถูกใช้ในตัวอย่างนี้เพื่อลบนามสกุลประเภทใดๆ ออกจากชื่อไฟล์ หากคุณเรียกใช้สคริปต์ ผลลัพธ์จะเป็น ' เฉลี่ย ' หลังจากลบนามสกุล ' พาย '.

read_file.sh

#!/bin/bash
# ตั้งชื่อไฟล์ด้วย path
ชื่อไฟล์='/home/fahmida/code/average.py'
# อ่านชื่อไฟล์แบบไม่มีนามสกุลโดยใช้คำสั่ง 'basname' และ `sed'
โยนออก '$(ชื่อฐาน '$filename' | sed 's/(.*)..*/1/')'

เรียกใช้สคริปต์

$ทุบตีread_file.sh

ตัวอย่างที่ 6: แปลงนามสกุลไฟล์จาก txt เป็น docx

ชื่อไฟล์ที่ไม่มีนามสกุลจำเป็นต้องแปลงไฟล์จากนามสกุลหนึ่งเป็นอีกนามสกุลหนึ่ง ตัวอย่างนี้แสดงให้เห็นว่าคุณสามารถเปลี่ยนนามสกุลของไฟล์ข้อความทั้งหมด (.txt) เป็นไฟล์คำ (.docx) ได้อย่างไรโดยใช้คำสั่ง `basename` ในสคริปต์ทุบตี สร้างไฟล์ชื่อ convert_file.sh ด้วยรหัสต่อไปนี้ ที่นี่ใช้ for-in loop เพื่ออ่านไฟล์ข้อความทั้งหมดด้วย .txt ส่วนขยายจากไดเร็กทอรีปัจจุบัน ชื่อไฟล์ที่ไม่มีนามสกุลจะถูกอ่านโดยคำสั่ง `basename` และเปลี่ยนชื่อโดยการเพิ่มนามสกุล .docx ในการวนซ้ำแต่ละครั้งของลูป

convert_file.sh

#!/bin/bash
# ลูปจะอ่านไฟล์ข้อความแต่ละไฟล์จากไดเร็กทอรีปัจจุบัน
สำหรับชื่อไฟล์ใน ``ลส *.txt``
ทำ
# พิมพ์ชื่อไฟล์ข้อความก่อนการแปลง
โยนออก 'ชื่อไฟล์ก่อนการแปลง:$ชื่อไฟล์'
# เปลี่ยนนามสกุลของไฟล์ txt เป็น docx
mv - '$ชื่อไฟล์' '$(ชื่อฐาน -- '$filename' .txt).docx '
เสร็จแล้ว

เรียกใช้สคริปต์

$ทุบตีconvert_file.sh

ตรวจสอบว่าไฟล์ข้อความถูกแปลงหรือไม่โดยใช้คำสั่ง `ls`

$ลส

ตัวอย่างที่ 7: อ่านชื่อไฟล์โดยไม่มีนามสกุลโดยใช้การขยายพารามิเตอร์ Shell

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

$ชื่อไฟล์='/var/usr/temp/myfile.tar.gz'

คำสั่งต่อไปนี้จะลบนามสกุลทุกประเภทออกจากเส้นทางและเก็บเส้นทางของไฟล์โดยไม่มีส่วนขยายในตัวแปร $file1 .

$ไฟล์1='${ชื่อไฟล์%%.*}'

คำสั่งต่อไปนี้จะพิมพ์ชื่อไฟล์จากพาธเท่านั้น ที่นี่ผลลัพธ์จะ ' myfile '.

$โยนออก '${file1##*/}'

หากชื่อไฟล์มีนามสกุลสองนามสกุลที่มีจุดสองจุด (.) และคุณต้องการอ่านชื่อไฟล์โดยลบนามสกุลไฟล์สุดท้ายออก คุณต้องใช้คำสั่งต่อไปนี้ รันคำสั่งต่อไปนี้ที่เก็บพาธไฟล์ไว้ในตัวแปร $ file2 โดยการลบนามสกุลสุดท้ายของไฟล์

$file2='${ชื่อไฟล์%.*}'

ตอนนี้ เรียกใช้คำสั่งต่อไปนี้เพื่อพิมพ์ชื่อไฟล์ที่มีนามสกุลจุด (.) ที่นี่ผลลัพธ์จะเป็น myfile.tar

$โยนออก '$ {ไฟล์2 ## * /}'

บทสรุป

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