Страница 1 из 1
Два простеньких скрипта.
Добавлено: 2007-09-26 20:54:49
zik
Здраствуйте.
Стоит такая задача:
1) Надо написать скрипт который будет удалять битые сылки с каталогов, пытаюсь через file организовать, но пока что-то несильн ополучается ...

Например команда file выводит такой результат:
Код: Выделить всё
root# file Bremenskie
Bremenskie: broken symbolic link to `../../unsorted/Video/HDD24/MF/Russian/Bremenskie'
Как отделить ту часть и скрипт реагировал на фразу broken symbolic link to и удалял битую сылку.
2) Удалять те файлы которым большее месяца ( это для файло помойки ). Тоже проблема, как выдернуть дату с создания файла. Задача распространеённая и думаю многие с ней сталкивались. Может у кого завалялся скрипт

Re: Два простеньких скрипта.
Добавлено: 2007-09-27 0:48:54
Alex Keda
Код: Выделить всё
/tmp/test/>ll
total 0
-rw-r--r-- 1 lissyara wheel 0 27 сен 01:47 aaaaa1
lrwxr-xr-x 1 lissyara wheel 5 27 сен 01:46 bbbbbbbbbb1 -> aaaaa
lrwxr-xr-x 1 lissyara wheel 6 27 сен 01:47 bbbbbbbbbb2 -> aaaaa1
/tmp/test/>file b
bbbbbbbbbb1@ bbbbbbbbbb2@
/tmp/test/>file bbbbbbbbbb1
bbbbbbbbbb1: broken symbolic link to `aaaaa'
/tmp/test/>file bbbbbbbbbb2
bbbbbbbbbb2: symbolic link to `aaaaa1'
/tmp/test/>file bbbbbbbbbb1| grep broken | wc -l
1
/tmp/test/>file bbbbbbbbbb2 | grep broken | wc -l
0
/tmp/test/>
думаю - дальше догадаешься?
============
про дату - find c соответствующими параметрами.
Re: Два простеньких скрипта.
Добавлено: 2007-09-27 21:31:32
zik
С файлами которые несоответсвуют дате разобрался. Удаляет файлы к которым необращались месяц и они весят более 10 мб.
Код: Выделить всё
find /ftp/home/ -atime +30 -size +20480 -print -delete
А с битыми сылками что-то запутался

Пытался сделать так, но что-то несильно получилось ....
Код: Выделить всё
find ./ -type l -print | xarg file | grep broken | xargs rm
пытался сделать так, но потом понял, что это полный бред и меня заклинило

Буду благодарен за любую подсказку.
Re: Два простеньких скрипта.
Добавлено: 2007-09-28 0:23:52
Alex Keda
Код: Выделить всё
#!/bin/sh
du -a /paht/to/dir |
{
while read file_path
do
if [ `file ${file_path}| grep broken | wc -l` -eq 1 ]
then
rm $file_path
fi
done
}
непроверял, писал сходу.
рекомендую програнть гденить на тестовой дире не с правами рута - чтоб лишнего не снесло если пойдёт не так.
Re: Два простеньких скрипта.
Добавлено: 2007-09-29 22:20:36
stgib
по поводу битых симлинков:
test(1) писал(а):
If file is a symbolic link, test will fully dereference it and then eval-
uate the expression against the file referenced, except for the -h and -L
primaries.
find(1) писал(а):
find -L /usr/ports/packages -type l -delete
Delete all broken symbolic links in /usr/ports/packages.
Re: Два простеньких скрипта.
Добавлено: 2007-09-30 0:16:43
Alex Keda
во. век учись - дураком помрёшь.

буду знать.
Re: Два простеньких скрипта.
Добавлено: 2007-10-02 16:32:50
zik
Код: Выделить всё
find -L /usr/ports/packages -type l -delete
Он так удаляет все линки, даже не битые
Re: Два простеньких скрипта.
Добавлено: 2007-10-02 16:54:49
zik
Код: Выделить всё
#!/bin/sh
du -a /ftp/film/ |
{
while read file_path
do
if [ `file ${file_path}| grep broken | wc -l` -eq 1 ]
then
rm $file_path
fi
done
}
и скриптик тоже не работает , хотя логически он верен
Может я непрвавильно обьяснил: есть сылки на папки с фмльмами, в них есть битые сылки - вот их и надо удалить !
Re: Два простеньких скрипта.
Добавлено: 2007-10-02 16:55:10
Alex Keda
Re: Два простеньких скрипта.
Добавлено: 2007-10-02 17:38:45
zik
Я б тоже улыбнулся, если всё не было так печально

Может какие-то мысли есть у кого-то ?! )
Re: Два простеньких скрипта.
Добавлено: 2007-10-02 22:34:00
stgib
zik писал(а):Код: Выделить всё
find -L /usr/ports/packages -type l -delete
Он так удаляет все линки, даже не битые
Не битые ссылки
find резолвит:
find(1) писал(а):
-L Cause the file information and file type (see stat(2)) returned
for each symbolic link to be those of the file referenced by the
link, not the link itself. If the referenced file does not
exist, the file information and type will be for the link itself.
Если у вас не так, то наверное стоит отправить баг репорт или хотя бы задать вопрос в
-questions.