Всё — это все, какие «границы»?
В программировании у
выражения границы есть
всегда. И какие именно имеются в виду в
сложной строчной команде, так просто не скажешь. Вплоть до терпеливого вдумчивого анализа исходников и проведения тестов. Это самое «всё» может оказаться очень даже разным, а еще всякие дефолты.
Но в Вашем конкретном случае логика другая: Команда обнаружив директорию согласно Вашей инструкции удаляет её, но поскольку она (была) не пустая — пытается прочитать, а её уже нет.
Воот. Именно этой логики я не понимаю.
Команда — это find, она ничего не удаляет (мы же не использовали - delete, правда?)
А вот то, что сначала отдает имя другой команде, а только потом идет дальше — воот, теперь у меня проясняется. Я, по наивности, полагал, что сначала найдем все, а потом уж будем решать, что с этим делать.
Списки там, массивы...
А оказывается, немедленная реакция на выдачу имени и запуск внешней команды, безо всякого опасения, что она может наделать с этим файлом. И только потом потом попытка работать с этим файлом, оказавшимся внезапно директорией.
Спасибо за разъяснение. Из той строчки в мане я в жизни бы такое «тупое» поведение не вывел. Такой умной утилиты.
Пользователь добавил сообщение 05 Июня 2017, 23:24:42:
+ сначала собрать все аргументы(закончить поиск), а потом приступить к удалению
Тут я не совсем могу согласиться, а именно насчет удаления. Там ключ -exec, т.е. тупо передать данные внешней команде. Что там она будет вытворять, find понятия не имеет.
Но. Теперь стало понятнее.
find не умеет цикл типа for in, как мне было померещилось.
Либо он в цикле дергает внешнюю команду, а потом, в той же итерации, выплняет дефолтное действие (углубление вниз по дереву, вот где моя ошибка/непонимание).
Либо (с модификатором +) сначала пройтись по всему древу, собрать найденные имена в строку через пробел (о, этот юниксвэй со святой верой в пробелы...) и скормить, что получится, однократно, внешней команде.
Спасибо за пинки, уже который раз помогаете понять.