[Linuxtrent] Re: problema banale?

  • From: Andrea Lusuardi - UoVoBW <linolusu@xxxxxx>
  • To: linuxtrent@xxxxxxxxxxxxx
  • Date: Fri, 1 Dec 2006 11:15:53 +0100

On Fri, 1 Dec 2006 10:25:03 +0100
"Marco Ciampa" <ciampix@xxxxxxxxx> wrote:

> Dovrei fare un elenco di file, controllare quelli che hanno caratteri
> accentati nel nome e rinominarli sostituendo le accentate con
> caratteri ascii e i caratteri che non riconosco con qualcos'altro.
> Qual'è il metodo più semplice secondo voi?
> 
> Elenco file:
> 
> ls|while read i
> do
>    #conversione / sostituzione caratteri con tr? perl? bo?
>    #nella variabile $y
>    mv $i nuovopercorso/$y
> done
> 
> banale? Non sono un esperto di tr e chiamare in causa il perl per
> questa cosa mi sembrava eccessivo...

un bel po di tempo fa ho trovato in giro questo script:
-------------
#!/usr/bin/perl -w

use File::Find;
use strict;
#die "usage: nospace dir[s]\n" unless @ARGV;

my %ext;

find(\&remspaces, '.');

sub remspaces {
return if ($_ eq '.');
return if ($_ eq '..');
(my $new = $_) =~ tr/a-zA-Z0-9_.-/_/c;
my $duplicate = ($new ne $_ and -e $new);
my $try = $new;

$ext{"$File::Find::dir/$try"}++ if $duplicate;

while (my $count = $ext{"$File::Find::dir/$new"}++) {
(my $with_num = $new) =~ s/(?=\.|$)/_$count/;
$new = $with_num, last if not -e $with_num;
}                               
                                
$ext{"$File::Find::dir/$try"}-- if $duplicate;
                                
rename $_ => $new               
or warn "can't rename $_ to $new: $!";
}                               
-------------

che sostituisce tutti i caratteri "strani" o comuqneu che possono dar
fastidio in bash o simili con degli _

Provalo, magari va bene.

ciao


--
         Andrea Lusuardi  -  UoVoBW 
        Registered Linux User #364578
http://uovobw.homelinux.org/ - GPG: 313C1073
        "Fire!", Exclamation mark;
        "Fire!", Exclamation mark;
       "Help me!", Exclamation mark.

Other related posts: