#!/usr/bin/perl -w # # iconv-rename.pl # # Fredrik Roubert 2006-02-13 # use strict; use File::Find; use Text::Iconv; use Getopt::Long; use constant DEFAULT_SRC_ENC => 'ISO-8859-1'; use constant DEFAULT_DST_ENC => 'UTF-8'; my ($iconv, $src_enc, $dst_enc, $verbose); sub wanted (); sub do_dir ($); sub do_file ($); $src_enc = DEFAULT_SRC_ENC; $dst_enc = DEFAULT_DST_ENC; $verbose = undef; GetOptions ( 'from-code=s' => \$src_enc, 'to-code=s' => \$dst_enc, 'verbose!' => \$verbose, ); if ($#ARGV < 0) { print STDERR <new($src_enc, $dst_enc); foreach my $file (@ARGV) { do_dir $file if -d $file; do_file $file; } sub wanted () { do_file $_; } sub do_dir ($) { finddepth(\&wanted, @_); } sub do_file ($) { my ($src, $dst); $src = $_[0]; $dst = $iconv->convert($src); unless (defined $dst) { print STDERR "$src: Conversion failed\n"; return; } if ($src eq $dst) { return; } unless (rename $src, $dst) { print STDERR "$src: $!\n"; } elsif ($verbose) { print "`$src' -> `$dst'\n"; } }