- Баг в программе FIND ?, newser, 22:06 , 02-Апр-07 (1)
>Кажется я нашел баг программы "find"... >Посмотрите листинги и скажите почему в одном случае программ работает коректно, а >в другом нет. Может это баг? >О программе: Программа ищет в созданных её самой под дирикториях определенный файл >и в одном случае удаляет папку с этим файлом, а в >другом перемещает. >О баге: При удалении все работает нормально - оба файла с их >папками удаляются, а при перемещении - один файл вместе со своей >директорией перемещается а другой файл остается на месте! > >ЗЫ Вариант (удаление или перемещание) необходимо поставить ручками ;) > >Листинг файла "find.sh" > >#!/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" с последующим запуском сценария > > >Листинг файла "del.sh" > >#!/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 для понимания его работы.
- Баг в программе FIND ?, DJon, 23:10 , 02-Апр-07 (2)
>Гм... А что, средства отладки нынче не в моде? 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? а то показалось, что для С...
- Баг в программе FIND ?, MKuznetsov, 00:16 , 03-Апр-07 (3)
по логике вещей должно прояснять чтение man 2 mv в особенности про -f
- Баг в программе FIND ?, DJon, 00:29 , 03-Апр-07 (4)
>по логике вещей должно прояснять чтение man 2 mv >в особенности про -f боюсь логикой этот баг непонять :) и -f тут не помогает. (ведь не "mv" ошибку выдает, а сам "find"...)
- Баг в программе FIND ?, newser, 10:00 , 03-Апр-07 (5)
> >Я согласен с этим, но вот что удивительно: Почему код: > >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 найдете баг. :)
- Баг в программе FIND ?, DJon, 21:43 , 03-Апр-07 (6)
>Еще раз: Вы меняете структуру каталогов ВО ВРЕМЯ работы программы 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
- Баг в программе FIND ?, newser, 23:54 , 03-Апр-07 (7)
>>Еще раз: Вы меняете структуру каталогов ВО ВРЕМЯ работы программы 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. Если же Вы упорно считаете это "багом", то Вы ошиблись форумом, пишите в список рассылки разработчиков.
- Баг в программе FIND ?, DJon, 00:35 , 04-Апр-07 (8)
>Повторяю для тех, кто в танке: У меня на 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 Ладно. Можно считать тему закрытой. Просто хотелось узнать мнение... Спасибо. И извеняюсь за потраченное вами время...
|