The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Баг в программе FIND ?"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Баг в программе FIND ?"  
Сообщение от DJon email(ok) on 02-Апр-07, 19:47 
[b]Кажется я нашел баг программы "find"...[/b]
Посмотрите листинги и скажите почему в одном случае программ работает коректно, а в другом нет. Может это баг?
О программе: Программа ищет в созданных её самой под дирикториях определенный файл и в одном случае удаляет папку с этим файлом, а в другом перемещает.
О баге: При удалении все работает нормально - оба файла с их папками удаляются, а при перемещении - один файл вместе со своей директорией перемещается а другой файл остается на месте!

ЗЫ Вариант (удаление или перемещание) необходимо поставить ручками ;)

[b]Листинг файла "find.sh"[/b]


#!/bin/sh

rm -R ./Test                            #Удаляю результаты предыдущей работы

mkdir  ./Test
mkdir  ./Test/Dir                        #Создаю иерархию папок и файлов для проверки
mkdir  ./Test/Dir/Dir1                        #бага. Мне нужны две директории и два файла
echo > ./Test/Dir/Dir1/MyFile
mkdir  ./Test/Dir/Dir2
echo > ./Test/Dir/Dir2/MyFile

find ./Test -type "f" -name "MyFile" -exec ./del.sh {}  \;    #Запускаю поиск файлов "MyFile" с последующим запуском сценария

[b]Листинг файла "del.sh"[/b]


#!/bin/sh

FilePath="$1"            #Путь к файлу
DirPath="${FilePath%/*}"    #Получаю путь к директории, где лежит файл

#РАСКОМЕНТИРУЙТЕ ОДНУ ИЗ ДВУХ СТРОК ДЛЯ ПРОВЕРКИ БАГА
#rm -R $DirPath                #при использовании этой строки - баг НЕ возникает. Обе директории, содержащие файл удаляются
#mv "$DirPath" "$DirPath/../../"    #при использовании этой - баг возникает. Одна директория переносится в директорию повыше, а другая остается на прежнем месте!!!


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Баг в программе FIND ?"  
Сообщение от newser (ok) on 02-Апр-07, 22:06 
>[b]Кажется я нашел баг программы "find"...[/b]
>Посмотрите листинги и скажите почему в одном случае программ работает коректно, а
>в другом нет. Может это баг?
>О программе: Программа ищет в созданных её самой под дирикториях определенный файл
>и в одном случае удаляет папку с этим файлом, а в
>другом перемещает.
>О баге: При удалении все работает нормально - оба файла с их
>папками удаляются, а при перемещении - один файл вместе со своей
>директорией перемещается а другой файл остается на месте!
>
>ЗЫ Вариант (удаление или перемещание) необходимо поставить ручками ;)
>
>[b]Листинг файла "find.sh"[/b]
>
 
>#!/bin/sh
>
>rm -R ./Test       #Удаляю результаты предыдущей
>работы
>
>mkdir  ./Test
>mkdir  ./Test/Dir      #Создаю иерархию папок и
>файлов для проверки
>mkdir  ./Test/Dir/Dir1      #бага. Мне нужны две
>директории и два файла
>echo > ./Test/Dir/Dir1/MyFile
>mkdir  ./Test/Dir/Dir2
>echo > ./Test/Dir/Dir2/MyFile
>
>find ./Test -type "f" -name "MyFile" -exec ./del.sh {}  \; #Запускаю
>поиск файлов "MyFile" с последующим запуском сценария
>

>
>[b]Листинг файла "del.sh"[/b]
>
 
>#!/bin/sh
>
>FilePath="$1"   #Путь к файлу
>DirPath="${FilePath%/*}" #Получаю путь к директории, где лежит файл
>
>#РАСКОМЕНТИРУЙТЕ ОДНУ ИЗ ДВУХ СТРОК ДЛЯ ПРОВЕРКИ БАГА
>#rm -R $DirPath    #при использовании этой строки - баг
>НЕ возникает. Обе директории, содержащие файл удаляются
>#mv "$DirPath" "$DirPath/../../" #при использовании этой - баг возникает. Одна директория переносится
>в директорию повыше, а другая остается на прежнем месте!!!
>

Гм... А что, средства отладки нынче не в моде? echo там, или вызов shell с ключом -x?

К тому же подумайте в какой ступор Вы вводите find, когда ПО ХОДУ его работы просто напросто меняете структуру каталогов. Не стоит так делать, ибо это неправильно. Хочется подобных извращений, man xargs Вам в руки.

Ну и для затравочки:

man find
man 3 fts
man xargs
Изучение исходных текстов find для понимания его работы.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Баг в программе FIND ?"  
Сообщение от DJon email(ok) on 02-Апр-07, 23:10 
>Гм... А что, средства отладки нынче не в моде? echo там, или
>вызов shell с ключом -x?

Ума неприложу, что можно вывести на экран.... текущая директория не изменяется, а файл найти не может...странно

>К тому же подумайте в какой ступор Вы вводите find, когда ПО
>ХОДУ его работы просто напросто меняете структуру каталогов. Не стоит так
>делать, ибо это неправильно. Хочется подобных извращений, man xargs Вам в
>руки.

Я согласен с этим, но вот что удивительно: Почему код:

mv "$DirPath" "$DirPath/../../"

..не работает, а его аналог:

cp -R "$DirPath" "$DirPath/../../"
rm -R "$DirPath"


...прекрасно справляется?

>Ну и для затравочки:
>
>man find
>man 3 fts
>man xargs
>Изучение исходных текстов find для понимания его работы.

Спасибо за подсказку, но "man find" я уже наверно наизусть раскажу :)
"man xargs" ума неприложу как прикруть к этому скрипту...тем более если в скрипт "del.sh" будет выдавать дополнительные данные..
"man 3 fts" точно для bash'a? а то показалось, что для С...


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Баг в программе FIND ?"  
Сообщение от MKuznetsov (??) on 03-Апр-07, 00:16 
по логике вещей должно прояснять чтение man 2 mv
в особенности про -f

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Баг в программе FIND ?"  
Сообщение от DJon email(ok) on 03-Апр-07, 00:29 
>по логике вещей должно прояснять чтение man 2 mv
>в особенности про -f

боюсь логикой этот баг непонять :)
и -f тут не помогает. (ведь не "mv" ошибку выдает, а сам "find"...)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Баг в программе FIND ?"  
Сообщение от newser (ok) on 03-Апр-07, 10:00 
>
>Я согласен с этим, но вот что удивительно: Почему код:
>
>mv "$DirPath" "$DirPath/../../"
>
>..не работает, а его аналог:
>
>cp -R "$DirPath" "$DirPath/../../"
>rm -R "$DirPath"
>
>
>...прекрасно справляется?
>
>
>Спасибо за подсказку, но "man find" я уже наверно наизусть раскажу :)
>
>"man xargs" ума неприложу как прикруть к этому скрипту...тем более если в
>скрипт "del.sh" будет выдавать дополнительные данные..
>"man 3 fts" точно для bash'a? а то показалось, что для С...
>

Еще раз: Вы меняете структуру каталогов ВО ВРЕМЯ работы программы find, поэтому когда find пытается прочитать запись о уже несуществующем каталоге, естественно происходит облом. Кстати, у меня на FreeBSD вариант с rm также НЕ прошел (find вернул ошибку: fts_read: No such file or directory). И это правильно. Ибо нефиг.

И еще раз: для подобных извращений используйте xargs, например так:

find /path -options ... | xargs ./del.sh

Только перед этим ВНИМАТЕЛЬНО прочитайте man xargs, а то ведь потом и в xargs найдете баг. :)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Баг в программе FIND ?"  
Сообщение от DJon email(ok) on 03-Апр-07, 21:43 
>Еще раз: Вы меняете структуру каталогов ВО ВРЕМЯ работы программы find, поэтому
>когда find пытается прочитать запись о уже несуществующем каталоге, естественно происходит
>облом. Кстати, у меня на FreeBSD вариант с rm также НЕ
>прошел (find вернул ошибку: fts_read: No such file or directory). И
>это правильно. Ибо нефиг.
>
>И еще раз: для подобных извращений используйте xargs, например так:
>
>find /path -options ... | xargs ./del.sh
>
>Только перед этим ВНИМАТЕЛЬНО прочитайте man xargs, а то ведь потом и
>в xargs найдете баг. :)

Еще раз: :) Ведь "rm" тоже изменяет структуру каталогов ВО ВРЕМЯ работы, но он ошибки не вызывает, в отличии от "mv"....значит это баг, а не "естественная" ситуация.. ;)

Ох...люблю баги находить... :D

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Баг в программе FIND ?"  
Сообщение от newser (ok) on 03-Апр-07, 23:54 
>>Еще раз: Вы меняете структуру каталогов ВО ВРЕМЯ работы программы find, поэтому
>>когда find пытается прочитать запись о уже несуществующем каталоге, естественно происходит
>>облом. Кстати, у меня на FreeBSD вариант с rm также НЕ
>>прошел (find вернул ошибку: fts_read: No such file or directory). И
>>это правильно. Ибо нефиг.
>>
>>И еще раз: для подобных извращений используйте xargs, например так:
>>
>>find /path -options ... | xargs ./del.sh
>>
>>Только перед этим ВНИМАТЕЛЬНО прочитайте man xargs, а то ведь потом и
>>в xargs найдете баг. :)
>
>Еще раз: :) Ведь "rm" тоже изменяет структуру каталогов ВО ВРЕМЯ работы,
>но он ошибки не вызывает, в отличии от "mv"....значит это баг,
>а не "естественная" ситуация.. ;)
>
>Ох...люблю баги находить... :D

Повторяю для тех, кто в танке: У меня на FreeBSD вариант с rm также НЕ прошел (find вернул ошибку: fts_read: No such file or directory). И это правильно. Ибо нефиг.

Для дальнейшего разговора как минимум напишите:

1. uname -a
2. Версию используемой команды find либо версию findutils.

Если же Вы упорно считаете это "багом", то Вы ошиблись форумом, пишите в список рассылки разработчиков.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "Баг в программе FIND ?"  
Сообщение от DJon email(ok) on 04-Апр-07, 00:35 
>Повторяю для тех, кто в танке: У меня на FreeBSD вариант с
>rm также НЕ прошел (find вернул ошибку: fts_read: No such file
>or directory). И это правильно. Ибо нефиг.
>
>Для дальнейшего разговора как минимум напишите:
>
>1. uname -a
>2. Версию используемой команды find либо версию findutils.
>
>Если же Вы упорно считаете это "багом", то Вы ошиблись форумом, пишите
>в список рассылки разработчиков.

Значит у меня не такой бажный find, как у тебя :D
У меня хотя-бы с "rm" работает... :)

1. Linux hostname 2.6.18.2-34-default #1 SMP Mon Nov 27 11:46:27 UTC 2006 i686 i686 i386 GNU/Linux
2. findutils 4.2.28-24

Ладно. Можно считать тему закрытой. Просто хотелось узнать мнение...
Спасибо. И извеняюсь за потраченное вами время...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру