Panduan Lengkap untuk Mengekstrak Nama File dari Path dengan Bash Command | UNIX LINUX EXPLORE
Edit

Panduan Lengkap untuk Mengekstrak Nama File dari Path dengan Bash Command

Skrip shell, khususnya di Bash (Bourne Again SHell), menyediakan beberapa metode untuk mengekstrak komponen file. Sebelum membahas teknisnya, penting untuk memahami struktur nama file. Biasanya, nama file terdiri dari dua bagian utama: nama dasar dan ekstensi, dipisahkan oleh titik (.). Misalnya, dalam file "contoh.txt" contoh adalah nama file, dan txt adalah ekstensi (ekstension) dari file tersebut.

Ada banyak alasan mengapa Anda mungkin ingin mengekstrak nama file dan ekstensi file di Bash:
  • Untuk memanipulasi nama berkas atau ekstensi - Anda mungkin ingin mengekstrak nama berkas atau ekstensi untuk memodifikasinya, seperti menambahkan awalan atau akhiran ke nama berkas, atau mengubah ekstensi file.
  • Untuk membuat berkas dengan nama unik - Anda mungkin ingin mengekstrak nama berkas dan ekstensi untuk membuat berkas baru dengan nama unik, seperti dengan menambahkan stempel waktu atau angka acak ke nama berkas.
  • Untuk menggunakan nama berkas atau ekstensi dalam skrip atau perintah - Anda mungkin ingin mengekstrak nama berkas atau ekstensi untuk menggunakannya sebagai argumen atau input untuk skrip atau perintah, seperti meneruskannya ke program atau membuat berkas dengan nama yang sama dengan direktori.
  • Untuk mengekstrak informasi dari nama berkas atau ekstensi - Anda mungkin ingin mengekstrak nama berkas atau ekstensi untuk mengekstrak informasi darinya, seperti tanggal atau jenis berkas.



Dalam artikel ini, kita akan membahas cara paling umum untuk mengekstrak nama file dan ekstensi file di Bash. Kita akan membahas masing-masing cara dan memberi tahu Anda kelebihan dan kekurangannya, sehingga Anda dapat membuat keputusan yang tepat tentang pendekatan mana yang paling cocok untuk Anda.

Mari kita bahas beberapa teknik yang paling efektif.


1. Menggunakan basename untuk Mengisolasi Nama File

a. Ekstraksi Nama File Dasar

Ekstrak nama file menggunakan perintah basename:


[root@ns1 ~]# basename /usr/local/bin/gcc
Hasilnya (output)


gcc
Contoh script di atas menunjukkan bagaimana basename menghapus jalur, dan hanya menyisakan nama file saja.

b. Menghapus Ekstensi File

Anda juga dapat menghapus ekstensi tertentu dengan basename dengan menentukan sufiks:


[root@ns1 ~]# basename /var/log/kernel.log .log
Hasilnya (output)


kernel
Perintah di atas menghapus ekstensi .log, menyederhanakan output menjadi hanya nama file saja

c. Menangani Ekstensi Kompleks

Untuk file dengan beberapa ekstensi, basename dapat menghapusnya secara efektif:


[root@ns1 ~]# basename /archive/backup.tar.gz .tar.gz
Hasilnya (output)


backup
Perintah di atas sangat berguna untuk berkas seperti arsip terkompresi yang umumnya memiliki lebih dari satu ekstensi.

d. Mengotomatiskan Ekstraksi Nama Berkas dalam Skrip

Gunakan basename dalam skrip Bash untuk memproses beberapa berkas:


for file in /images/*.jpg; do
    base=$(basename "$file" .jpg)
    echo $base
done
Hasilnya (output)


picture1
picture2
picture3
Skrip ini mengulang setiap file .jpg, mengekstrak nama file tanpa ekstensi, dan mencetaknya.


2. Mengekstrak Direktori dengan dirname

Perintah dirname dalam Bash digunakan untuk mengekstrak jalur direktori dari jalur file lengkap, mengisolasi komponen direktori dan mengabaikan nama file.

a. Ekstraksi Direktori Dasar

Untuk mendapatkan hanya bagian direktori dari suatu jalur, gunakan perintah dirname:


[root@ns1 ~]# dirname /usr/local/bin/gcc
Hasilnya (output)


/usr/local/bin
Perintah di atas menunjukkan bahwa dirname mengekstrak dan menampilkan jalur ke direktori yang berisi file, yang berguna untuk skrip tempat Anda perlu bekerja dengan jalur direktori.

b. Bekerja dengan Direktori Bertingkat

dirname dapat menangani struktur direktori bertingkat secara mendalam dengan efektif:


[root@ns1 ~]# dirname /home/user/docs/work/report.txt
Hasilnya (output)


/home/user/docs/work
Contoh di atas menunjukkan bagaimana dirname secara akurat menangkap jalur lengkap yang mengarah ke direktori terakhir, tidak termasuk nama file.

c. Menggunakan dirname dalam Skrip Bash

dirname sangat berguna dalam skrip Bash, terutama saat Anda perlu memanipulasi atau menavigasi ke direktori yang berbeda. Berikut cara menggunakannya dalam skrip:


filepath="/var/log/apache2/access.log"
dirpath=$(dirname "$filepath")
echo $dirpath
Hasilnya (output)


/var/log/apache2
Contoh script di atas menunjukkan cara menyimpan jalur direktori dalam variabel untuk penggunaan selanjutnya, seperti pencatatan, pencadangan, atau operasi khusus direktori lainnya.

d. Beberapa Panggilan ke dirname

Jika Anda perlu menavigasi ke beberapa tingkat dalam struktur direktori, Anda dapat melakukan panggilan berantai ke dirname:


[root@ns1 ~]# dirname $(dirname /home/user/docs/work/report.txt)
Hasilnya (output)


/home/user/docs
Perintah di atas menghilangkan dua tingkat direktori, yang menunjukkan bagaimana dirname dapat disusun berlapis untuk naik ke pohon direktori sesuai kebutuhan.

e. Menggabungkan basename dan dirname

Menggabungkan basename dan dirname memungkinkan manipulasi file dan direktori yang fleksibel dalam skrip. Berikut ini contoh penggunaan keduanya untuk memisahkan nama file dan direktorinya:


filepath="/home/user/docs/work/report.txt"
filename=$(basename "$filepath")
directory=$(dirname "$filepath")
echo "File: $filename is in Directory: $directory"
Hasilnya (output)


File: report.txt is in Directory: /home/user/docs/work

3. Manipulasi Teks Lanjutan dengan awk dan sed

awk dan sed adalah alat pemrograman serbaguna yang dirancang untuk pemrosesan teks, ideal untuk manipulasi jalur berkas tingkat lanjut. Alat-alat ini khususnya berguna untuk menangani pola-pola yang rumit dan mengubah data teks, yang membuatnya sangat diperlukan dalam skenario yang melibatkan tugas-tugas manajemen berkas yang terperinci.

a. Mengekstrak Nama Berkas dari Jalur Menggunakan awk

Untuk mengisolasi nama berkas dari jalur, Anda dapat memanfaatkan kemampuan awk untuk membagi masukan berdasarkan pembatas dan mengekstrak komponen yang diinginkan:


[root@ns1 ~]# echo "/usr/local/bin/gcc" | awk -F'/' '{print $NF}'
Hasilnya (output)


gcc
Pilihan -F'/' menetapkan pemisah bidang menjadi garis miring, dan $NF merujuk ke bidang terakhir, yang merupakan nama file dalam suatu jalur.

b. Menghapus Ekstensi File dengan awk

awk juga dapat menghapus ekstensi file dengan memanipulasi bidang terakhir yang diperoleh dari suatu jalur:


[root@ns1 ~]# echo "example.tar.gz" | awk -F'.' '{print $1}'
Hasilnya (output)


example
Perintah di atas menetapkan pemisah bidang ke titik, dan $1 mengambil segmen pertama dari nama berkas, yang secara efektif menghapus ekstensi.

c. Menggunakan sed untuk Mengisolasi dan Memodifikasi Nama Berkas

sed, atau Stream Editor, unggul dalam melakukan transformasi teks menggunakan ekspresi reguler. Perintah ini dapat digunakan untuk mengisolasi nama berkas dari jalur atau menghapus ekstensi secara efisien:

Mengekstrak Nama Berkas


[root@ns1 ~]# echo "/usr/local/bin/gcc" | sed 's#.*/##'
Hasilnya (output)


gcc
Perintah sed ini menggunakan ekspresi reguler yang menghapus semua hal hingga dan termasuk garis miring terakhir, mengisolasi nama berkas.

Menghapus Ekstensi


[root@ns1 ~]# echo "report.txt" | sed 's/\.[^.]*$//'
Hasilnya (output)


report
Di sini, sed menargetkan titik yang diikuti oleh karakter apa pun yang bukan titik hingga akhir baris, yang secara efektif menghapus ekstensi file.


4. Contoh Skrip Praktis Menggunakan awk, sed, dan Bash

a. Membuat Skrip untuk Mengganti Nama Ekstensi File

Salah satu tugas umum dalam administrasi sistem dan manajemen file adalah mengganti nama ekstensi file. Berikut cara menggunakan sed dalam skrip Bash untuk mengganti nama file secara massal dari satu ekstensi ke ekstensi lainnya:


#!/bin/bash

# Directory containing files
directory="/path/to/files"

# Loop through all .txt files in the directory
for file in "$directory"/*.txt; do
    # Use sed to change the file extension from .txt to .md
    newname=$(echo "$file" | sed 's/\.txt$/.md/')
    mv "$file" "$newname"
done

echo "Renaming complete."
Skrip ini mengubah semua file .txt menjadi file .md di direktori yang ditentukan, yang menunjukkan bagaimana sed dapat digunakan untuk memanipulasi nama file dalam proses batch.

b. Mengekstrak Data Tertentu dari File Log

awk sangat berguna untuk memproses file log. Berikut skrip yang mengekstrak informasi tertentu dari file log Apache:


#!/bin/bash

# Path to the Apache log file
logfile="/var/log/apache2/access.log"

# Use awk to extract and print IP addresses and request dates
awk '{print $1, $4}' "$logfile" > extracted_data.txt

echo "Data extraction complete."
Skrip di atas akan mengekstrak kolom pertama (biasanya alamat IP) dan kolom keempat (tanggal dan waktu permintaan) dari berkas log akses Apache dan menyimpannya ke berkas baru. Contoh ini menggambarkan bagaimana awk dapat dimanfaatkan untuk tugas analisis log yang hebat.

c. Memproses Berkas Secara Batch untuk Ekstraksi Data

Menggabungkan find, awk, dan sed dapat menciptakan alur kerja yang hebat untuk menangani beberapa berkas. Berikut ini contoh yang menemukan semua berkas CSV, mengekstrak bidang tertentu, dan memproses konten:


#!/bin/bash

# Directory to search
directory="/path/to/data"

# Find all CSV files and process them
find "$directory" -type f -name '*.csv' | while read file; do
    echo "Processing $file"
    awk -F',' '{print $1, $2}' "$file" | sed 's/"//g' > "${file%.csv}_processed.txt"
done

echo "Batch processing complete."
Skrip di atas akan menemukan semua file CSV dalam direktori yang ditentukan, memproses setiap file untuk mengekstrak dua kolom pertama, menghapus tanda kutip menggunakan sed, dan menyimpan hasilnya ke file baru. Ini adalah contoh praktis penggunaan alat-alat ini dalam alur kerja pemrosesan data.

Secara keseluruhan, mengekstrak nama file dan ekstensi file di Bash dapat menjadi teknik yang berguna untuk bekerja dengan file dan melakukan berbagai tugas di shell Bash.

Masing-masing metode yang disebutkan memiliki kelebihan dan kekurangannya sendiri, dan pilihan terbaik akan bergantung pada kebutuhan dan preferensi spesifik Anda. Sering kali berguna untuk mengetahui beberapa pendekatan sehingga Anda dapat memilih salah satu yang paling sesuai untuk situasi Anda.