Mengganti nama file

Hampir semua tulisan soal linux di blog ini berawal dari kisah masalah nyata. Setiap kali dapat masalah baru, saya semakin tertarik untuk menelisik apa yang bisa dilakukan dengan Linux untuk menyelesaikan masalah tsb. Misalnya soal ini… cara mengganti nama file secara massal.

Saya punya banyak file dengan nama dalam pola tertentu, misalnya file-01.txt, file-02.txt, file-03.txt, dst. Saya ingin mengganti - (dash) dengan _ (underscore) seperti file_01.txt, file_02.txt, file_03.txt, dsb. Kalau diganti satu per satu… bisa sih, kalau mau. Tapi repot kalau ternyata jumlah filenya puluhan bahkan ratusan.

Dari mana file sebanyak itu?

Cara paling cepat untuk mendapatkan banyak file teks dalam waktu singkat adalah touch. Untuk keperluan demo tulisan ini, buatlah folder baru bernama demo serta 100 file teks dengan nama file-xxx.txt.

mkdir demo
cd demo
touch file-{001..100}.txt
ls

Oiya, file teks yang saya maksud di sini adalah file teks murni (plain text) tanpa format apapun. Jenis ekstensi file .txt bisa diganti dengan jenis file teks lain , misalnya *.php, *.html, *.css, dsb.

A text file is a computer file that only contains text and has no special formatting such as bold text, italic text, images, etc.
Sumber

File LibreOffice (.odt dan .ods) juga bisa dibuat secara massal menggunakan perintah touch, cuma nanti ada pemberitahuan terkait encoding (file .ods) sewaktu dibuka. Soal perintah touch selengkapnya, silakan baca di sini.

Meski dalam contoh ini saya menggunakan file teks, namun cara mengganti nama file ini juga bisa digunakan untuk semua jenis file, tak harus file teks.

Mengganti – (dash) dengan _ (underscore)

Untuk mengganti - (dash) dengan _ (underscore) dalam semua nama file .txt:

rename 's/-/_/g' *.txt

Hasilnya: file-01.txtfile_01.txt, dst.

*.txt hanya berlaku untuk semua file teks dalam sebuah direktori. Untuk mengganti semua nama file (apapun jenisnya), gunakan tanda * (asteriks) saja.

Mengganti _ (underscore) dengan . (titik)

Untuk mengganti _ (underscore) dengan . (titik) dalam semua nama file .txt:

rename 's/_/./g' *.txt

Hasilnya: file_01.txtfile.01.txt, dst.

Mengganti . (titik) dengan _ (underscore)

Ini sedikit berbeda, sebab ada titik sebelum jenis ekstensi file (misal .txt). Kalau pakai rename 's/\.+/_/g' *.txt, hasilnya file.01.txtfile_01_txt, dst. Kalau pakai rename 's/./_/g' *.txt, hasilnya lebih parah, yaitu tes.01.txt not renamed: __________ already exists. Rupanya linux berusaha mengubah semua nama file menjadi __________ yang, tentu saja, already exists.

Untuk mengganti . (titik) dengan _ (underscore) dalam semua nama file .txt:

for f in *.txt; do pre="${f%.*}"; suf="${f##*.}"; mv -i -- "$f" "${pre//./_}.${suf}"; done

Hasilnya: file.01.txtfile_01.txt, dst.

Untuk menerapkan pada semua jenis file (tidak hanya .txt), ganti *.txt dengan *.* (atau cukup *) seperti ini

for f in *.*; do pre="${f%.*}"; suf="${f##*.}"; mv -i -- "$f" "${pre//./_}.${suf}"; done

Selamat mencoba, semoga bermanfaat.

Baca juga:

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s