[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