ALT Linux Community general discussions
 help / color / mirror / Atom feed
* [Comm] скрипт на bash (problem)
@ 2006-10-13 16:31 Grigory Fateyev
  2006-10-13 16:43 ` Michael Shigorin
                   ` (3 more replies)
  0 siblings, 4 replies; 7+ messages in thread
From: Grigory Fateyev @ 2006-10-13 16:31 UTC (permalink / raw)
  To: community

Здравствуйте!

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


#!/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


-- 
Всего наилучшего! Григорий
greg [at] anastasia [dot] ru
Письмо отправлено: 2006/10/13 20:24


^ 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
                   ` (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 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 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
                   ` (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

end of thread, other threads:[~2006-10-14 11:07 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
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
2006-10-14 11:07   ` Grigory Fateyev

ALT Linux Community general discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/community/0 community/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 community community/ http://lore.altlinux.org/community \
		mandrake-russian@linuxteam.iplabs.ru community@lists.altlinux.org community@lists.altlinux.ru community@lists.altlinux.com
	public-inbox-index community

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.community


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git