The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Баг в программе FIND ?, !*! DJon, 02-Апр-07, 19:47  [смотреть все]
Кажется я нашел баг программы "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/../../"    #при использовании этой - баг возникает. Одна директория переносится в директорию повыше, а другая остается на прежнем месте!!!


  • Баг в программе 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 ?, !*! 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

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




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

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