Martinus Ady H. BloG

Human Knowledge Belongs To The World

Batch Rename With Shell Script

| Comments

Kemarin di tempat saya bekerja ada kejadian bagaimana caranya me-rename nama file yang mempunyai akhiran “S” menjadi “R”, masalahnya adalah semua file tersebut tidak mempunyai pattern yang sama kecuali 3 huruf di depan dan 1 huruf dibelakang yaitu huruf “S” yang harus dirubah menjadi “R” :D Contoh nama file yang akan direname kurang lebih seperti terlihat dibawah ini :

1
2
3
4
martinus@artivisi:[~]$ ls
EDW980012011S   EDW980T22011S
EDW980G32011S   EDWSUBS42011S
martinus@artivisi:[~]$

Pada kasus diatas, kita tidak bisa secara langsung melakukan kegiatan find and replace biasa. Karena ternyata huruf “S” juga terdapat ditengah-tengah nama file tersebut seperti terlihat pada tampilan diatas :( Setelah bertanya ke paman Google sebentar, akhirnya saya menemukan pattern untuk menghapus karakter terakhir dari sebuah string menggunakan command sed. Dan pattern tersebut adalah sed 's/\(.*\)./\1/' :D akhirnya setelah dikombinasikan dengan sedikit kemampuan di shell script jadilah script yang isinya adalah sebagai berikut :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/sh

ls EDW* > file.txt

find_file() {
   cat file.txt | sort | cut -d " " -f1
}

for f in $(find_file) ; do
   echo "Original filename $f"
   # tampung nama file yang baru (remove last character)
   newfilename=`echo $f | sed 's/\(.*\)./\1/'`
   echo "After delete last character $newfilename"
   r=R
   newfile1=$newfilename$r
   echo "New filename is $newfile1"
   mv $f $newfile1
done

Simpan script diatas dengan nama terserah (misalkan batch_rename.sh), kemudian beri akses execute dan jalankan. Jika tidak ada error, harusnya jika dijalankan akan merename semua file menjadi seperti dibawah ini :

1
2
3
4
martinus@artivisi:[~]$ ls
EDW980012011R   EDW980T22011R
EDW980G32011R   EDWSUBS42011R
martinus@artivisi:[~]$

Untuk penjelasan sed dan regex-nya, saya masih belum bisa menjelaskan :D Maklum saya juga masih belajar :D Semoga script diatas bisa berguna juga buat teman-teman yang mempunyai masalah yang sama :)

Comments