|
|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Igor Nikolaev 2:5030/266 12 Dec 2000 22:35:59 To : "Alex V. Litovchenko" Subject : Re: еще один идиотский вопрос -------------------------------------------------------------------------------- Alex V. Litovchenko <avl@partner.donetsk.ua> wrote: > КАК дерево с каталогами и файлами перевести > в нижний регистр (названия) киньте плс скрипт cat >recurse.pl <<EOF #!/usr/bin/perl -w use strict; my $command = $ARGV[0] || 'print "%%\n"'; my $directory = $ARGV[1] || '.'; # work sub function { ( my $file = $_[0] ) =~ s/("|\$)/\\$1/g; # '"' and '$' ( my $cmd = $command ) =~ s/%%/$file/g; # %% is file eval $cmd; die $@ if $@; # run command and die if errors } # walk sub recurse { my $dir = $_[0]; opendir DIR, $dir or die "Can't opendir $dir: $!"; my @files = sort grep { !/^\.{1,2}/ } readdir DIR; closedir DIR; foreach ( @files ) { my $file = $dir eq '.' ? $_ : "$dir/$_"; -d $file ? &recurse($file) : &function($file); } } # main &recurse ( $directory ); EOF Использование: перебираемое имя файла обзывается '%%' Второй параметр позволяет задать стартовый каталог. Вот пример переименования всех файлов в верхний регистр: % recurse 'print "mv %% ",lc("%%"),"\n"' | sh Можно конечно и сразу написать что-то типа recurse 'rename "%%", lc("%%")' выкинув экранирование дурацких символов в именах, но я обычно таки сначала глазками смотрю, а затем shelly скармливаю, чай не часто делаем ;-) -- Игорь Hиколаев --- ifmail v.2.12.os.sensi * Origin: Добавить воблы и пива по вкусу. (2:5030/266@fidonet) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/13416652a00a9.html, оценка из 5, голосов 10
|