[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: rinominare file accentati,



On Mon, Oct 10, 2005 at 03:45:16PM +0200, Daniele Ludovici wrote:
[...]
> io uso questo script scritto da me, non e' la perfezione ma direi che e'
> passabile.

mi sono permesso di estendere il tuo script. Ora accetta espressioni da
usare con glob per rinominare un elenco di files (salta le directories).

[...]
> # Toglie tutto il resto
> s/[^\w .-]//sg;

questo l'ho tolto perche fa dei danni in realta'...

--8<-- CUT HERE --8<--
#!/usr/bin/perl -w
 
use strict;
use File::Copy;
use File::Glob;
use Getopt::Long;
use POSIX qw(:errno_h);

my $interactive = 0;
my $debug = 0;
my $verbose = 0;
my $lowercase = 0;
my $orig_filename;
my $answ;

if (!GetOptions ("interactive" => \$interactive,
		"debug" => \$debug,
		"lowercase" => \$lowercase,
		"verbose" => \$verbose) 
	|| @ARGV != 1) {
  print <<EOHELP;
usage: $0 [-i/--interactive] [-d/--debug] [-v/--verbose] [-l/--lowercase] EXPR
EOHELP
  exit EINVAL;
}

foreach (<$ARGV[0]>) {
	
	next unless -f;
	$orig_filename = $_;
	
	# converte tutte le accentate minuscole
	tr/[\xe0\xe1\xe8\xe9\xec\xed\xf2\xf3\xf9\xfa/aaeeiioouu/;
	s/([\x80-\xff])/ord($1)/eg; # smanazza i caratteri estesi
	 
	#mette tutto a lowercase (a me piace cosi')
	tr/A-Z/a-z/ if $lowercase;
	 
	# Converte spazi, elimina ridondanze di distanziamento
	s/[\s_]+/_/g;
	 
	# Elimina spuri iniziali e finali
	s/^[_-]+//;
	s/[_-]+$//;
	s/_-_/-/;
	 
	print "$orig_filename -> $_" if $debug;
	
	next if $orig_filename eq $_;
	if (!length($_)) {
		print "ma che razza di nome e' '$_' per un file??\n";
		next;
	};
	
	if ($interactive) {
		print "Vuoi rinonminare '$orig_filename' in '$_'? [y/N] ";
		chomp($answ = <STDIN>);
		next unless ($answ =~ m/^[yY]$/);
	}
	move($orig_filename, $_);
	print "Rinominato $orig_filename in $_ \n" if $verbose;
}
exit 0;
--8<-- CUT HERE --8<--

-- 
mattia
:wq!



Reply to: