25 Juli 2013

Menghilangkan karakter aneh pada berkas

Walaupun GNU/Linux dapat mengenal nama berkas dengan karakter aneh-aneh, hal tersebut dapat mengganggu bagi pengguna "command line". Untuk itu, berikut sebuah script sederhana yang mengganti karakter-karakter aneh seperti [] (),?*#" menjadi dash "-". Jika ingin menghilangkan karakter lain, silakan modifikasi bagian "gsub()".

Selain itu, mode berkas menjadi 644 dan mode direktori menjadi 755. Script bernama "fixfs" ini menggunakan bash, ls, dan gawk.

#!/bin/bash
# $Id: fixfs 606 2013-08-29 07:29:51Z rmssvn $
# svn propset svn:keywords "Date Revision HeadURL Id Author" fixfs
# fixfs: fixing filesistems' name and mode

# Add escape \"
# Replacing all funny and white characters with a dash (-).
# Replacing multiple dashes (---) with a single dash (-)
# No dash before a dot.

ls -1 | gawk '{
   FNAME1=$0
   gsub (/\"/,"\\\"",FNAME1)
   FNAME2=FNAME1
   NCHG=0
   NCHG += gsub (/\\\"/,"-",FNAME2)
   NCHG += gsub (/\x27/,"-",FNAME2)
   NCHG += gsub (/[ (),\[\]\?\*\#]/,"-",FNAME2)
   NCHG += gsub (/--+/,"-",FNAME2)
   NCHG += gsub (/-\./,".",FNAME2)
   NCHG += gsub (/^-/,"",FNAME2)
   if (NCHG > 0) {
      system("/bin/mv \""  FNAME1  "\" " FNAME2)
   }
}'

# chmod 755 for all directories
# chmod 644 for all files
for ii in `ls` ; do
   [ -d $ii ] && {
      chmod 755 $ii
      cd $ii
      # Recursive inside the DIR
      fixfs
      cd ..
   }
   [ -f $ii ] && chmod 644 $ii
done

exit 0

# fixfs: fixing file systems' name and mode
# $Revision: 606 $
# $Date: 2013-08-29 14:29:51 +0700 (Thu, 29 Aug 2013) $
# Copyright (C) 2013 Rahmat M. Samik-Ibrahim
# http://RahmatM.Samik-Ibrahim.vLSM.org/

Grrr... memo blog ini terutama ditulis untuk KEPERLUAN SENDIRI. Semoga catatan ini akan bermanfaat di masa mendatang, saat sudah lupa cara menyelesaikan masalah trivia ini. Tulisan ini berbasis "Google Sana, Google Sini, Coba Itu, Coba Ini, Lalu Tanya-tanyi". Entah ini PLAGIAT, entah ini RISET, yang jelas tidak pernah ada klaim bahwa ini merupakan karya asli, dan belum tentu pula merupakan solusi terbaik :).