Если вы просто отбросите перенаправление ввода <
в командной строке find, оболочка попытается перенаправить ввод, переданный на найти . Вы хотите, чтобы перенаправление выполнялось для команды, выполняемой find. Но find
не знает, как выполнить перенаправление, поэтому вы должны явно попросить его запустить оболочку для анализа заданной вами команды. Примерно так:
find -name "an_*" -execdir sh -c "./run < {}" \;
Возможно, ответ такой же, как и в этом вопросе с подвохом:
Как спуститься со слона? Нет. Вы получаете от гуся.
Из «Практики программирования» Брайана В. Кернигана и Роба Пайка, гл. 6, стр.158:
Когда Стив Борн писал свою оболочку Unix (которая стала известна как оболочка Bourne), он создал каталог из 254 файлов с односимвольными именами, по одному для каждого байтового значения, кроме ' \ 0 'и косая черта, два символа, которые не могут появляться в именах файлов Unix.
Я сделал это. Это было в системе UNIX, работающей на PDP-11 где-то в 1980 году. Я создал файл под названием «WhatXNow?». Затем я использовал «редактор» двоичных файлов, чтобы отредактировать дисковое устройство и изменить «X» на «/» в индексном дескрипторе (при отключенной файловой системе).
Пострадавший так и не понял, как его удалить.
Редактировать: упс, Бармар прав, я не заметил там строчки о том, что устройство не устанавливается. И да, это был каталог, который я редактировал, а не индексный дескриптор. Это было давно: -)
Любой сценарий, в котором/
(точнее, байт, а не символ, со значением 0x2f; почти все ядра Unix преднамеренно не обращают внимания на кодировку символов )находит путь в запись каталога, без ручного манипулирования необработанными блоками диска, несомненно, является ошибкой в ядре.
Такие ошибки время от времени случаются. Один случай, который я помню, читал примечания к патчу, заключается в том, что некоторые итерации эпохи 1990-х годов -… я хочу сказать Solaris, но это может быть неправильно… предлагали сервер для протокола AppleTalk Filing Protocol (AFP ), который был классическим эквивалентом NFS в MacOS. Проблема была в том, что в классической MacOS вам вполне разрешено помещать /
в компонент пути; вместо этого используется разделитель каталогов :
. Сервер AFP должен был выполнять моральный эквивалент tr :/ /:
при сопоставлении путей, представленных клиентами, с файлами на его диске, но они пропустили пару путей кода, и поскольку сервер был реализован внутри ядра, это может фактически записать плохие записи каталога.
(См. comp.unix FAQ #2.2 , подраздел, начинающийся «Что, если в имени файла есть '/'?», для более длинной версии вышеизложенного.)