* 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
* 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
* [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
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