* Re: [Comm] скрипт на bash (problem)
2006-10-13 16:31 [Comm] скрипт на bash (problem) Grigory Fateyev
@ 2006-10-13 16:43 ` Michael Shigorin
2006-10-13 18:09 ` Pavel Usischev
` (2 subsequent siblings)
3 siblings, 0 replies; 7+ messages in thread
From: Michael Shigorin @ 2006-10-13 16:43 UTC (permalink / raw)
To: community
On Fri, Oct 13, 2006 at 08:31:22PM +0400, Grigory Fateyev wrote:
> #!/bin/bash
> DIR=~/www/testsed/
> IFS="\n"
Лишнее.
> if [ -n "$DIR" ]; then
> cd $DIR
> for file in `ls *`; do
Лучше просто for file in *, не придётся кувыркаться.
Или ls | while read file; do ...; done
> echo "$file"
> cf=`echo "$file" | tr ' ' '_'`
Предпочитаю такие места на всякий тоже кавычить:
cf="`echo "$file" | tr ' ' '_'`"
> echo $cf
> if [ $cf != "$file" ]; then
> mv "$file" $cf
mv "$file" "$cf"
(да, тут пробелы, но бывают-то не только пробелы -- как
минимум ещё табы)
> fi
> done
> fi
--
---- WBR, Michael Shigorin <mike@altlinux.ru>
------ Linux.Kiev http://www.linux.kiev.ua/
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Comm] скрипт на bash (problem)
2006-10-13 16:31 [Comm] скрипт на bash (problem) Grigory Fateyev
2006-10-13 16:43 ` Michael Shigorin
@ 2006-10-13 18:09 ` Pavel Usischev
2006-10-14 5:06 ` Denis Kirienko
2006-10-13 22:16 ` Aleksander N.Gorohovski
2006-10-14 9:29 ` Sergei Boudnik
3 siblings, 1 reply; 7+ messages in thread
From: Pavel Usischev @ 2006-10-13 18:09 UTC (permalink / raw)
To: ALT Linux Community
Grigory Fateyev пишет:
> Здравствуйте!
>
> Пишу скрипт, который должен в директории изменить в именах файлов
> символы пробела на символы подчёркивания.
Может и не совсем в тему, но конкретно эту задачу решить очень просто:
rename ' ' _ ~/www/testsed/*
--
С уважением,
Павел Усищев
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Comm] скрипт на bash (problem)
2006-10-13 18:09 ` Pavel Usischev
@ 2006-10-14 5:06 ` Denis Kirienko
0 siblings, 0 replies; 7+ messages in thread
From: Denis Kirienko @ 2006-10-14 5:06 UTC (permalink / raw)
To: community
Pavel Usischev пишет:
> rename ' ' _ ~/www/testsed/*
О как! А я и не знал...
А то мне часто приходится в одном каталоге из набора файлов
1 2 3 4 5 6 8 9 10 11 12 13 14 15 ...
делать набор
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 ...
Раньше я делал:
$ for f in ? ; do mv $f 0$f ; done
а оказывается можно
$ rename '' 0 ?
Спасибо!
--
Денис
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Comm] скрипт на bash (problem)
2006-10-13 16:31 [Comm] скрипт на bash (problem) Grigory Fateyev
2006-10-13 16:43 ` Michael Shigorin
2006-10-13 18:09 ` Pavel Usischev
@ 2006-10-13 22:16 ` Aleksander N.Gorohovski
2006-10-14 9:29 ` Sergei Boudnik
3 siblings, 0 replies; 7+ messages in thread
From: Aleksander N.Gorohovski @ 2006-10-13 22:16 UTC (permalink / raw)
To: ALT Linux Community
[-- Attachment #1: Type: text/plain, Size: 1492 bytes --]
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
>
>
[-- Attachment #2: s_.pl --]
[-- Type: application/octet-stream, Size: 684 bytes --]
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Comm] скрипт на bash (problem)
2006-10-13 16:31 [Comm] скрипт на bash (problem) Grigory Fateyev
` (2 preceding siblings ...)
2006-10-13 22:16 ` Aleksander N.Gorohovski
@ 2006-10-14 9:29 ` Sergei Boudnik
2006-10-14 11:07 ` Grigory Fateyev
3 siblings, 1 reply; 7+ messages in thread
From: Sergei Boudnik @ 2006-10-14 9:29 UTC (permalink / raw)
To: ALT Linux Community
Grigory Fateyev пишет:
> Здравствуйте!
>
> Пишу скрипт, который должен в директории изменить в именах файлов
> символы пробела на символы подчёркивания. Но почему то замена "mv" не проходит. Что не так?
>
У меня скрипт переименовывает файлы и каталоги, которые берет из списка.
#!/bin/bash
#
[ -f "$1" ] && RenameList=$1 || exit 1
str=`cat $RenameList | wc -l`
until [ $str -le 0 ] ; do
Path="`tail -n $str $RenameList | head -n1`"
NewPath=`echo "$Path" | sed 'y/ /_/'`
[ -d `dirname $NewPath` ] || mkdir -p `dirname $NewPath`
[ -f "$Path" -o -d "$Path" ] && mv -f "$Path" "$NewPath"
str=`expr $str - 1`
done
rm -f $RenameList
#EOF
Список создается командой:
find /path/to/dir -name "* *" > /path/to/file.lst
--
WBR, Sergei Boudnik
http://www.boudnik.kiev.ua
--------------------------
Tel: +38050 3584082
ICQ UIN: 56809672
SSB-RIPE
SSB1-UANIC
==========================
Trap for spam & virii:
trap@wildlist.org.ua
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Comm] скрипт на bash (problem)
2006-10-14 9:29 ` Sergei Boudnik
@ 2006-10-14 11:07 ` Grigory Fateyev
0 siblings, 0 replies; 7+ messages in thread
From: Grigory Fateyev @ 2006-10-14 11:07 UTC (permalink / raw)
To: community
Hello Sergei Boudnik!
On Sat, 14 Oct 2006 12:29:49 +0300 you wrote:
> Grigory Fateyev пишет:
> > Здравствуйте!
> >
> > Пишу скрипт, который должен в директории изменить в именах файлов
> > символы пробела на символы подчёркивания. Но почему то замена "mv"
> > не проходит. Что не так?
Спасибо за отличные примеры, много полезного для себя вынес :)
--
Всего наилучшего! Григорий
greg [at] anastasia [dot] ru
Письмо отправлено: 2006/10/14 15:06
^ permalink raw reply [flat|nested] 7+ messages in thread