Perintah nama dasar di Linux mencetak komponen terakhir di jalur file. Ini sangat membantu dalam skrip bash tempat Anda ingin mengekstrak nama file dari jalur file yang panjang.
Mari saya tunjukkan kepada Anda dengan beberapa contoh.
Perintah nama dasar
Perintah basename memiliki dua jenis sintaks. Yang pertama melibatkan sufiks:
basename PATH [suffix]
Yang kedua memungkinkan Anda untuk menambahkan opsi:
basename OPTION PATH
Anda tidak dapat menggabungkan opsi dengan sufiks. Jangan bingung dulu. Ikuti contoh dan kemudian Anda akan mengerti apa yang ingin saya katakan.
Menggunakan perintah basename dengan path file akan memberikan nama file:
basename /home/user/data/filename.txt
filename.txt
Perintah basename sebenarnya cukup bodoh. Itu tidak benar-benar mengenali jalur file. Itu hanya mencari garis miring (/) dan mencetak apa pun setelah garis miring terakhir.
Misalnya, jika saya menjalankan contoh di atas dengan menghapus nama file, inilah yang akan dihasilkan.
basename /home/user/data
data
Hapus ekstensi file dengan akhiran
Penggunaan utama dari perintah bash adalah dalam mengekstrak nama file dari jalur file. Anda juga dapat menghapus ekstensi file saat mengekstrak nama file.
Cukup sebutkan apa yang ingin Anda hapus dari akhir output. Jadi katakanlah, Anda ingin menghapus .txt dari nama file.txt. Cukup tambahkan di akhir perintah nama dasar:
basename /home/user/data/filename.txt .txt
filename
Anda juga dapat menggunakan opsi -s untuk sufiks:
basename -s .txt /home/user/data/filename.txt
filename
Sufiks dihapus dari akhir komponen akhir input. Itu tidak benar-benar mengetahui ekstensi file. Jika Anda memberikan txt (tanpa titik) alih-alih .txt, Anda akan mendapatkan 'nama file.' (dengan titik di akhir).
Juga, jika Anda memberikan sufiks yang tidak ada di akhir komponen, outputnya tetap seolah-olah tidak ada sufiks.
basename /home/user/data/filename.txt name
filename.txt
Menggunakan nama dasar dengan banyak jalur
Dengan opsi -a
, Anda dapat menggunakan beberapa jalur secara bersamaan.
basename -a /home/user/data/filename1.txt /home/user/data/filename2.txt
filename1.txt
filename2.txt
Anda dapat menggunakan opsi sufiks -s
dengan -a
tetapi dengan beberapa keterbatasan. Anda hanya dapat memberikan satu sufiks ke semua jalur file.
basename -as .txt /home/user/data/filename1.txt /home/user/data/filename2.txt
filename1
filename2
Anda tidak dapat menetapkan cukup individu. Ini tidak akan berhasil.
Anda juga dapat memisahkan output dengan NULL alih-alih baris baru dengan -z
pilihan.
Menggunakan nama dasar dalam skrip bash
Saya menunjukkan beberapa contoh perintah basename. Mari kita lihat beberapa contoh nama dasar dalam skrip bash.
Misalkan Anda memiliki variabel jalur file dan Anda ingin menyimpan nama file dari jalur dalam variabel. Ini bisa berupa skrip sederhana:
pathname="/home/dir/data/filename"
result=$(basename "$pathname")
echo $result
Contoh lain adalah di mana Anda ingin mengganti nama ekstensi file. Tentu saja, Anda dapat menggunakan perintah rename untuk mengelompokkan rename file, tetapi ini hanyalah sebuah contoh.
Jadi, saya menulis contoh skrip ini dengan tujuan untuk mengganti ekstensi file:
for file in *$1; do
if [ -f $file ]; then
mv $file `basename $file .$1`.$2
fi
done
Apakah Anda memperhatikan bahwa saya mencentang apakah itu file atau bukan dalam skrip bash sehingga tidak mengubah direktori yang cocok?
Anda dapat menggunakan skrip di atas seperti ini:
./myscript.sh html htm
Dan itu akan mengganti nama semua file di direktori saat ini dengan html di akhir menjadi htm.
Ini hanya beberapa contoh. Anda dapat menggunakannya sesuai kebutuhan Anda.
Perintah basename dilengkapi dengan perintah dirname. Tidak seperti nama dasar, perintah dirname mencetak semua jalur kecuali komponen terakhir.
Saya harap Anda menyukai tutorial ini. Seperti biasa, jangan ragu untuk mengajukan pertanyaan atau memberikan saran di bagian komentar.