Странное поведение команды find (Находит не все файлы)

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

pas
Сообщения: 597
Статус: маньяк
ОС: Gentoo

Странное поведение команды find

Сообщение pas »

Команда find почему-то находит только 4 файла с нулевым размером из 145
Команда:
$ find /home/pas/rep/mirror/pool/* -size 0c
/home/pas/rep/mirror/pool/main/m/mysql-dfsg-5.1/libmysqlclient-dev_5.1.41-3ubuntu12.1_i386.deb
/home/pas/rep/mirror/pool/universe/c/comedi/comedi-source_0.7.76+20090411cvs-3_all.deb
/home/pas/rep/mirror/pool/universe/l/lua-xmlrpc/liblua5.1-xmlrpc-dev_1.0b-5_all.deb
/home/pas/rep/mirror/pool/universe/libu/liburi-todisk-perl/liburi-todisk-perl_1.12-1_all.deb
$

Почему так?
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Странное поведение команды find

Сообщение watashiwa_daredeska »

pas писал(а):
12.06.2010 01:59
$ find /home/pas/rep/mirror/pool/* -size 0c
А звездочка зачем?
Покажите ls -l файл-который-не-нашел-find.
Спасибо сказали:
pas
Сообщения: 597
Статус: маньяк
ОС: Gentoo

Re: Странное поведение команды find

Сообщение pas »

$ ls -l /home/pas/rep/mirror/pool/universe/t/telepathy-qt/libqttelepathy-dev_0.14.1+svn2064-0ubuntu1_i386.deb
lrwxrwxrwx 1 pas pas 80 2010-06-05 05:42 /home/pas/rep/mirror/pool/universe/t/telepathy-qt/libqttelepathy-dev_0.14.1+svn2064-0ubuntu1_i386.deb -> ../../../main/t/telepathy-qt/libqttelepathy-dev_0.14.1+svn2064-0ubuntu1_i386.deb

Попробовал
find /home/pas/rep/mirror/pool/* \( \( \( -type f \) -or \( -type l \) \) -and \( -size 0c \) \)

Результат тот же.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5404
ОС: Gentoo

Re: Странное поведение команды find

Сообщение /dev/random »

pas писал(а):
12.06.2010 02:30
$ ls -l /home/pas/rep/mirror/pool/universe/t/telepathy-qt/libqttelepathy-dev_0.14.1+svn2064-0ubuntu1_i386.deb
lrwxrwxrwx 1 pas pas 80 2010-06-05 05:42 /home/pas/rep/mirror/pool/universe/t/telepathy-qt/libqttelepathy-dev_0.14.1+svn2064-0ubuntu1_i386.deb -> ../../../main/t/telepathy-qt/libqttelepathy-dev_0.14.1+svn2064-0ubuntu1_i386.deb

Попробовал
find /home/pas/rep/mirror/pool/* \( \( \( -type f \) -or \( -type l \) \) -and \( -size 0c \) \)

Результат тот же.

Вы не ответили на вопрос watashiwa_daredeska. Приведите вывод ls -l для файла, который find пропустил.
Спасибо сказали:
pas
Сообщения: 597
Статус: маньяк
ОС: Gentoo

Re: Странное поведение команды find

Сообщение pas »

Первая цитата как раз вывод ls
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5404
ОС: Gentoo

Re: Странное поведение команды find

Сообщение /dev/random »

pas писал(а):
12.06.2010 03:14
Первая цитата как раз вывод ls

Оу.. Прошу прощения.

Это не пустой файл, а симлинк, и симлинк этот не пуст - в нём есть адрес файла. Поэтому find его и проигнорировал. Используйте опцию -L, чтобы анализировать целевые файлы, а не сами симлинки. Указывается до пути.
Спасибо сказали:
pas
Сообщения: 597
Статус: маньяк
ОС: Gentoo

Re: Странное поведение команды find

Сообщение pas »

$ find -L /home/pas/rep/mirror/pool/* -size 0c
/home/pas/rep/mirror/pool/main/m/mysql-dfsg-5.1/libmysqlclient-dev_5.1.41-3ubuntu12.1_i386.deb
/home/pas/rep/mirror/pool/universe/c/comedi/comedi-source_0.7.76+20090411cvs-3_all.deb
/home/pas/rep/mirror/pool/universe/l/lua-xmlrpc/liblua5.1-xmlrpc-dev_1.0b-5_all.deb
/home/pas/rep/mirror/pool/universe/libu/liburi-todisk-perl/liburi-todisk-perl_1.12-1_all.deb
$

По всей видимости пустые файлы это в основном линки на несуществующие файлы. Хотелось бы их отловить
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5404
ОС: Gentoo

Re: Странное поведение команды find

Сообщение /dev/random »

pas писал(а):
12.06.2010 03:23
По всей видимости пустые файлы это в основном линки на несуществующие файлы. Хотелось бы их отловить

А вот это уже СОВСЕМ другая вещь. Симлинки на несуществующие файлы вообще никакого отношения к пустым файлам не имеют, и ловятся вот таким трюком:
find -L /path/ -type l
Спасибо сказали:
pas
Сообщения: 597
Статус: маньяк
ОС: Gentoo

Re: Странное поведение команды find

Сообщение pas »

спасибо
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Странное поведение команды find

Сообщение SLEDopit »

pas писал(а):
12.06.2010 01:59
find /home/pas/rep/mirror/pool/* -size 0c
кстати, в gnu версии find есть параметр -empty (:
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
pas
Сообщения: 597
Статус: маньяк
ОС: Gentoo

Re: Странное поведение команды find

Сообщение pas »

Собственно нужен был скрипт, который загружает не скачанные файлы на которые есть ссылки. Сам скрипт (работающий) если кому понадобится:

Код: Выделить всё

#!/bin/sh
BASEDIR="/home/pas/rep/mirror/pool"
REMDIR="ftp://mirror.yandex.ru/ubuntu/pool"
ind=0
for fl in $(find -L /home/pas/rep/mirror/pool -type l); do
ind=$(($ind+1))
done
countind=$ind
ind=0
for fl in $(find -L /home/pas/rep/mirror/pool -type l); do
echo Файл $ind из $countind
ind=$(($ind+1))
lnk=$(ls -Ql $fl|cut -d '"' -f4|sed 's/..\/..\/..//g')
#echo $BASEDIR = $lnk
delfile=$(basename $BASEDIR$lnk)
llnk=$(echo $BASEDIR$lnk | sed "s/$delfile//g")
#echo new = $llnk
wget -c -nc -t 5 --dot-style=default -P $llnk $REMDIR$lnk 2>&1
done
Спасибо сказали:
Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

Re: Странное поведение команды find

Сообщение Ленивая Бестолочь »

pas писал(а):
13.06.2010 23:30
ind=0
for fl in $(find -L /home/pas/rep/mirror/pool -type l); do
ind=$(($ind+1))
done

это вы так считаете кол-во ссылок?
наверно проще сделать так:

Код: Выделить всё

ind=$(find -L /home/pas/rep/mirror/pool -type l | wc -l)
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали: