ALT Linux Community general discussions
 help / color / mirror / Atom feed
* Re: [mdk-re]  Удаление битых ссылок
@ 2001-02-09 12:25 denf
  2001-02-09 14:16 ` [mdk-re] " Dmitry V. Levin
  2001-02-09 15:29 ` cornet
  0 siblings, 2 replies; 8+ messages in thread
From: denf @ 2001-02-09 12:25 UTC (permalink / raw)
  To: mandrake-russian


02/09/2001 03:01:30 PM mandrake-russian-admin wrote:
>Hello!!
>
>Волею судеб, на сервере в одном каталоге и его подкаталогах образуется
>большое количество битых символических ссылок (то есть указывающих на
>уже не_существующие файлы). Этих ссылок много и чистить их руками сильно
>ломает. Может подскажет кто простой способ автоматизации этого дела?
>Хотелось бы залудить на cron скриптик, который лез бы в вышеозначеный
>каталог и рекурсивно долбал бы все эти битые ссылки.

что-нибудь типа
if [ -L $file ] && [ ! -f $file ]; then
  rm -f  $file
fi
ну и все это в цикле пустить с помощью find

PS. bash rulez ;-)


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [mdk-re] Re: [mdk-re]  Удаление битых ссылок
  2001-02-09 12:25 [mdk-re] Удаление битых ссылок denf
@ 2001-02-09 14:16 ` Dmitry V. Levin
  2001-02-09 15:36   ` cornet
  2001-02-09 15:29 ` cornet
  1 sibling, 1 reply; 8+ messages in thread
From: Dmitry V. Levin @ 2001-02-09 14:16 UTC (permalink / raw)
  To: mandrake-russian

[-- Attachment #1: Type: text/plain, Size: 1342 bytes --]

On Fri, Feb 09, 2001 at 03:29:06PM +0600, denf@novosoft.ru wrote:
> >Волею судеб, на сервере в одном каталоге и его подкаталогах образуется
> >большое количество битых символических ссылок (то есть указывающих на
> >уже не_существующие файлы). Этих ссылок много и чистить их руками сильно
> >ломает. Может подскажет кто простой способ автоматизации этого дела?
> >Хотелось бы залудить на cron скриптик, который лез бы в вышеозначеный
> >каталог и рекурсивно долбал бы все эти битые ссылки.
> 
> что-нибудь типа
> if [ -L $file ] && [ ! -f $file ]; then
>   rm -f  $file
> fi

Корректнее так:
[ ! -L "$file" -o -e "$file" ] || rm -f "$file"
Если встречаются файлы с пробелами в именах, то эту строчку следует
выделить в отдельный скрипт, и вызывать через "find -print 0 |xargs -r0".

См. тж. find(1), test(1), xargs(1).

> ну и все это в цикле пустить с помощью find
> 
> PS. bash rulez ;-)


Regards,
	Dmitry

+-------------------------------------------------------------------------+
Dmitry V. Levin     mailto://ldv@fandra.org
Software Engineer   PGP pubkey http://www.fandra.org/users/ldv/pgpkeys.html
IPLabs Linux Team   http://linux.iplabs.ru
Fandra Project      http://www.fandra.org
+-------------------------------------------------------------------------+
UNIX is user friendly. It's just very selective about who its friends are.

[-- Attachment #2: Type: application/pgp-signature, Size: 232 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [mdk-re] Re: [mdk-re] Удаление битых ссылок
  2001-02-09 12:25 [mdk-re] Удаление битых ссылок denf
  2001-02-09 14:16 ` [mdk-re] " Dmitry V. Levin
@ 2001-02-09 15:29 ` cornet
  1 sibling, 0 replies; 8+ messages in thread
From: cornet @ 2001-02-09 15:29 UTC (permalink / raw)
  To: mandrake-russian

denf@novosoft.ru wrote:
> 
> 02/09/2001 03:01:30 PM mandrake-russian-admin wrote:
> >Hello!!
> >
> >Волею судеб, на сервере в одном каталоге и его подкаталогах образуется
> >большое количество битых символических ссылок (то есть указывающих на
> >уже не_существующие файлы). Этих ссылок много и чистить их руками сильно
> >ломает. Может подскажет кто простой способ автоматизации этого дела?
> >Хотелось бы залудить на cron скриптик, который лез бы в вышеозначеный
> >каталог и рекурсивно долбал бы все эти битые ссылки.
> 
> что-нибудь типа
> if [ -L $file ] && [ ! -f $file ]; then
>   rm -f  $file
> fi
> ну и все это в цикле пустить с помощью find

Работает, но действительно боится имен с пробелами....

Спасибо :-))

-- 
******** FIRE & STEEL ********



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [mdk-re] Re: [mdk-re]   Удаление битых ссылок
  2001-02-09 14:16 ` [mdk-re] " Dmitry V. Levin
@ 2001-02-09 15:36   ` cornet
  2001-02-09 15:58     ` cornet
  0 siblings, 1 reply; 8+ messages in thread
From: cornet @ 2001-02-09 15:36 UTC (permalink / raw)
  To: mandrake-russian

"Dmitry V. Levin" wrote:
> 
> On Fri, Feb 09, 2001 at 03:29:06PM +0600, denf@novosoft.ru wrote:
> > >Волею судеб, на сервере в одном каталоге и его подкаталогах образуется
> > >большое количество битых символических ссылок (то есть указывающих на
> > >уже не_существующие файлы). Этих ссылок много и чистить их руками сильно
> > >ломает. Может подскажет кто простой способ автоматизации этого дела?
> > >Хотелось бы залудить на cron скриптик, который лез бы в вышеозначеный
> > >каталог и рекурсивно долбал бы все эти битые ссылки.
> >
> > что-нибудь типа
> > if [ -L $file ] && [ ! -f $file ]; then
> >   rm -f  $file
> > fi
> 
> Корректнее так:
> [ ! -L "$file" -o -e "$file" ] || rm -f "$file"

Отлично работает, и пробелов в именах не_боится :-))

Вызов
find ./ -exec ./com.sh {} \;

содержимое com.sh
#!/bin/sh
file="$1"
[ ! -L "$file" -o -e "$file" ] || rm -f "$file"

Только не совсем понятно, в чем заключается большая корректность по
отношению к варианту, который предложил denf@novosoft.ru, можете о
пояснить?

> Если встречаются файлы с пробелами в именах, то эту строчку следует
> выделить в отдельный скрипт, и вызывать через "find -print 0 |xargs -r0".

уххх... че то xargs очень мудреной штукой оказался :-(( или я еще пока
что не вьехал  :-))


-- 
******** FIRE & STEEL ********



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [mdk-re] Re: [mdk-re]   Удаление битых ссылок
  2001-02-09 15:36   ` cornet
@ 2001-02-09 15:58     ` cornet
  2001-02-09 16:33       ` cornet
  0 siblings, 1 reply; 8+ messages in thread
From: cornet @ 2001-02-09 15:58 UTC (permalink / raw)
  To: mandrake-russian

cornet wrote:
> Вызов
> find ./ -exec ./com.sh {} \;
> 
> содержимое com.sh
> #!/bin/sh
> file="$1"
> [ ! -L "$file" -o -e "$file" ] || rm -f "$file"

И еще вопрос!
Ведь при такой обработке, по поводу !каждого! найденного файла
вызывается com.sh а значит создается новый процесс, выполняющий com.sh.
А если обрабатываемый каталог содержит десятки тысяч файлов??!! Боюсь
что время выполнения такой обработки будет большим, и нагрузка на
систему - огого...
Вот как бы избежать таких множественных вызовов?

А можно как нибудь результат find гнать не в параметр запуска -exec а в
трубу, и на другом конце все это сгребать в цикле, передавать в
переменную $file и обрабатывать той же стокой
[ ! -L "$file" -o -e "$file" ] || rm -f "$file"
???

ведь при этом ИМХО будет запущено всего два процесса на всю
обработку....

-- 
******** FIRE & STEEL ********



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [mdk-re] Re: [mdk-re]   Удаление битых ссылок
  2001-02-09 15:58     ` cornet
@ 2001-02-09 16:33       ` cornet
  2001-02-10  4:18         ` Dmitry V. Levin
  0 siblings, 1 reply; 8+ messages in thread
From: cornet @ 2001-02-09 16:33 UTC (permalink / raw)
  To: mandrake-russian

cornet wrote:
> А можно как нибудь результат find гнать не в параметр запуска -exec а в
> трубу, и на другом конце все это сгребать в цикле, передавать в
> переменную $file и обрабатывать той же стокой
> [ ! -L "$file" -o -e "$file" ] || rm -f "$file"
> ???
Ok, уже сам справился :-))
Все оказалось до безобразия просто, и требуется всего ОДИН шелл на всею
процедуру!
Вызов:

find ./ -print | ./com.sh

Содержимое com.sh:

#!/bin/sh
while read file
do [ ! -L "$file" -o -e "$file" ] || rm -f "$file"
done 

Как все оказывается просто, когда знаешь!!!
:-))))))))

Спасибо, Дмитрий! Вы навели меня на кучу удачных мыслей :-))

-- 
******** FIRE & STEEL ********



^ permalink raw reply	[flat|nested] 8+ messages in thread

* [mdk-re] Re: [mdk-re] Удаление битых ссылок
  2001-02-09 16:33       ` cornet
@ 2001-02-10  4:18         ` Dmitry V. Levin
  2001-02-12 12:14           ` cornet
  0 siblings, 1 reply; 8+ messages in thread
From: Dmitry V. Levin @ 2001-02-10  4:18 UTC (permalink / raw)
  To: mandrake-russian

[-- Attachment #1: Type: text/plain, Size: 1466 bytes --]

On Fri, Feb 09, 2001 at 04:35:10PM +0300, cornet wrote:
> cornet wrote:
> > А можно как нибудь результат find гнать не в параметр запуска -exec а в
> > трубу, и на другом конце все это сгребать в цикле, передавать в
> > переменную $file и обрабатывать той же стокой
> > [ ! -L "$file" -o -e "$file" ] || rm -f "$file"
> > ???
> Ok, уже сам справился :-))
> Все оказалось до безобразия просто, и требуется всего ОДИН шелл на всею
> процедуру!
> Вызов:
> 
> find ./ -print | ./com.sh
> 
> Содержимое com.sh:
> 
> #!/bin/sh
> while read file
> do [ ! -L "$file" -o -e "$file" ] || rm -f "$file"
> done 
> 
> Как все оказывается просто, когда знаешь!!!
> :-))))))))

А теперь усложним задачу. :)

Представьте себе, что среди множества подлежащих обработке файлов
встречаются файлы с именами, содержащими, скажем, символ перевода строки.

Тогда Ваш скриптик придется слегка подправить:
#!/bin/sh
for file in "$@"; do
	[ -e "$file" ] || rm -f "$file"
done

и вызывать его так:
find . -type l -print0 |xargs -r0 ./com.sh


Regards,
	Dmitry

+-------------------------------------------------------------------------+
Dmitry V. Levin     mailto://ldv@fandra.org
Software Engineer   PGP pubkey http://www.fandra.org/users/ldv/pgpkeys.html
IPLabs Linux Team   http://linux.iplabs.ru
Fandra Project      http://www.fandra.org
+-------------------------------------------------------------------------+
UNIX is user friendly. It's just very selective about who its friends are.

[-- Attachment #2: Type: application/pgp-signature, Size: 232 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [mdk-re] Re: [mdk-re]  Удаление битых ссылок
  2001-02-10  4:18         ` Dmitry V. Levin
@ 2001-02-12 12:14           ` cornet
  0 siblings, 0 replies; 8+ messages in thread
From: cornet @ 2001-02-12 12:14 UTC (permalink / raw)
  To: mandrake-russian

"Dmitry V. Levin" wrote:
> 
> On Fri, Feb 09, 2001 at 04:35:10PM +0300, cornet wrote:
> > cornet wrote:
> > > А можно как нибудь результат find гнать не в параметр запуска -exec а в
> > > трубу, и на другом конце все это сгребать в цикле, передавать в
> > > переменную $file и обрабатывать той же стокой
> > > [ ! -L "$file" -o -e "$file" ] || rm -f "$file"
> > > ???
> > Ok, уже сам справился :-))
> > Все оказалось до безобразия просто, и требуется всего ОДИН шелл на всею
> > процедуру!
> > Вызов:
> >
> > find ./ -print | ./com.sh
> >
> > Содержимое com.sh:
> >
> > #!/bin/sh
> > while read file
> > do [ ! -L "$file" -o -e "$file" ] || rm -f "$file"
> > done
> >
> > Как все оказывается просто, когда знаешь!!!
> > :-))))))))
> 
> А теперь усложним задачу. :)
> 
> Представьте себе, что среди множества подлежащих обработке файлов
> встречаются файлы с именами, содержащими, скажем, символ перевода строки.
> 
> Тогда Ваш скриптик придется слегка подправить:
> #!/bin/sh
> for file in "$@"; do
>         [ -e "$file" ] || rm -f "$file"
> done
> 
> и вызывать его так:
> find . -type l -print0 |xargs -r0 ./com.sh
> 

Ага, сеньк, об этом я как то не подумал. Хотя ума не приложу как такие
файлы вообще могут появиться :-/
Тем более, что все эти ссылки создаются из скилетной директории, которая
создана и обновляется непосредственно моими ручками и больше никак.

******** FIRE & STEEL ********



^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2001-02-12 12:14 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-02-09 12:25 [mdk-re] Удаление битых ссылок denf
2001-02-09 14:16 ` [mdk-re] " Dmitry V. Levin
2001-02-09 15:36   ` cornet
2001-02-09 15:58     ` cornet
2001-02-09 16:33       ` cornet
2001-02-10  4:18         ` Dmitry V. Levin
2001-02-12 12:14           ` cornet
2001-02-09 15:29 ` cornet

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