[Comm] скрипт на bash (problem)

Aleksander N.Gorohovski =?iso-8859-1?q?angel_=CE=C1_feht=2Edgtu=2Edonetsk=2Eua?=
Сб Окт 14 02:16:10 MSD 2006


On Fri, 13 Oct 2006 16:31:22 -0000, Grigory Fateyev <greg на anastasia.ru>  
wrote:

> Здравствуйте!
>
> Пишу скрипт, который должен в директории изменить в именах файлов
> символы пробела на символы подчёркивания. Но почему то замена "mv" не  
> проходит. Что не так?

Попробуйте немного Perl-овки
:)

########################################################
#
#	Рекурсивная замена в именах каталогов/файлов: /s+/_/
#	created by Aleksander Gorohovski (2006). This is free software.
#	angel на feht.dgtu.donetsk.ua

use File::Find;
die "Example usage:\n\t $0 <dir>\n" if ! @ARGV;
$_="$ENV{PWD}/$_" for(@ARGV);

my $a;
while(! $a){
     @Files=undef;

     find sub{push @Files,$File::Find::name if $> == 0 ||  
(stat($File::Find::name))[4] == $>}, на ARGV;

     $a=1;
     for my $df (@Files){
	next if !length($df);
	my @d=split /\//,$df;

	$d[-1]=~s/\s+/_/g;
	my $dt=join '/', на d;
	if($df ne $dt){$a=0,print "$df => $dt\n" if rename($df,$dt)}
     }
}
exit;
#------------------------------------

Это Вам поможет

> #!/bin/bash
>
> DIR=~/www/testsed/
> IFS="\n"
>
> if [ -n "$DIR" ]; then
>     cd $DIR
>     for file in `ls *`; do
>         echo "$file"
>         cf=`echo "$file" | tr ' ' '_'`
>         echo $cf
>         if [ $cf != "$file" ]; then
>             mv "$file" $cf
>         fi
>     done
> fi
> > ~/cut.sh
> file 1
> file 2
> file 3
> file_4
> file_1
> file_2
> file_3
> file_4
> mv: невозможно выполнить stat для `file 1\nfile 2\nfile 3\nfile_4': No
> such file or directory
>
>

----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : s_.pl
Тип     : application/octet-stream
Размер  : 683 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/community/attachments/20061013/b983632e/attachment-0003.obj>


Подробная информация о списке рассылки community