yurakolotov: (Default)
yurakolotov ([personal profile] yurakolotov) wrote2012-04-05 02:37 pm
Entry tags:

Снова линукс, или Как сломать рекурсию

Дверь проломить - купил отбойный молоток
В. Высоцкий, "Песня автозавистника"


Написал (на Матлабе) простую функцию: начиная с данной папки, пройти по всем подлежащим папкам рекурсивно и обработать (некоторым способом) все найденные файлы с расширением DAT.

По ошибке запустил её не из своей директории, а из /root.

Молчала полминуты, потом заявила: "Слишком глубокая рекурсия (500 заходов), если хотите раздвинуть пределы ... " и т.д.

Поскольку такой глубины дерево не бывает, пришлоть копнуть. За две минуты докопался. В некоей директории ХХХ дорогой и любимый Линукс, умница и лапочка, держал линк на "../ХХХ". Естественно, прямой как палка Матлаб решил, что этот линк - директория и пошёл жрать свой собственный хвост.

По словам коллеги: отбойным молотком очень удобно раздвигать пределы рекурсии.

[identity profile] einat-ceisar.livejournal.com 2012-04-05 12:14 pm (UTC)(link)
А чего, поучительно!

[identity profile] yurakolotov.livejournal.com 2012-04-05 01:19 pm (UTC)(link)
Ну, разве из категории "приколы нашего городка". Потому что такой линк это всё-таки изврат.

[identity profile] kot-begemot.livejournal.com 2012-04-05 01:14 pm (UTC)(link)
Ну вообще-то для этого в линухе есть функции ftw() и nftw() как раз и предназначенные для корректного обхода дерева директорий. В том числе и с учётом линков. То что в Матлабе этих функций нет - проблема Матлаба. Или всё-таки есть? Тогда это проблема аффтара...

[identity profile] yurakolotov.livejournal.com 2012-04-05 01:18 pm (UTC)(link)
Матлаба, конечно.
Но в некотором смысле и аффтара - что не подумал о такой дивной возможности.

Я всё-таки простой алгоритмист, извращениями не увлекаюсь, и что кто-то станет себя на себя замыкать мне в голову не пришло. зачем онанизм, если можно дрова пилить?

[identity profile] kot-begemot.livejournal.com 2012-04-05 01:30 pm (UTC)(link)
Иногда очень удобно иметь возможность сослаться на себя таким вот нетривиальным образом.
Матлаб вообще-то должен (по идее) содержать какой-то способ вызова библиотечных функций из glibc, но в этом я совсем не спец.