У меня есть каталог с большим количеством файлов.
./I_am_a_dir_with_many_subdirs/
Внутри скрипта я бы хотел найти в нем все подкаталоги, отсортировать их и вывести в массив bash. Итак, я делаю:
SubdirsArray=(`find ./I_am_a_dir_with_many_subdirs/ -maxdepth 2 -mindepth 2 -type d | sort`)
Выполняя скрипт, я получаю следующие сообщения об ошибках:
sort: write failed: standard output: Broken pipe
sort: write error
Как объясняется в этом посте : вероятно, sort
выполняет и закрывает канал перед find
завершением записи в него. Таким образом, команда write (), инициированная find
EPIPE, получает ошибку «Broken pipe», ОС отправляет find
SIGPIPE. Прежде чем SIGPIPE достигает find
, он печатает сообщение об ошибке, затем получает SIGPIPE и умирает.
Вопросов:
Итак, что
SubdirsArray
содержит мой ? Субдиры, которыеfind
нашли, ноsort
оставили несортированными?Если так, то как быть с этой проблемой с сломанными трубами? Заставить find записать его результаты во временный файл, а затем заставить sort прочитать его?
Я не понимаю, почему «это также не о чем беспокоиться», если это происходит в неинтерактивной оболочке: почему? My
SubdirsArray
содержит что-то несортированное и далее в скрипте, я предполагаю, что его элементы отсортированы ?!Я получаю два сообщения об ошибках:
sort: write failed: standard output: Broken pipe sort: write error
В этой теме предполагается, что sort
во временной директории недостаточно места для сортировки всех входных данных. Но разве это не значит, что этот сорт получил что-то от find?!? Я в замешательстве ... В любом случае, я пытался использовать
SubdirsArray=(`find ./I_am_a_dir_with_many_subdirs/ -maxdepth 2 -mindepth 2 -type d | sort -T /home/temp_dir`)
но это не помогло
PS
Я не уверен, важно ли это, но я использую find|sort
в многопроцессорном сценарии: несколько процессоров одновременно выполняют одну и ту же команду в подоболочках.
sort
ничего не может сделать, прежде чем он прочитает ввод полностью, и, кроме того, если бы онsort
заканчивался преждевременно, он быfind
сообщал о сломанной трубе, а неsort
. Ошибка в другой теме, которую вы упоминаете, выглядит совсем иначе и действительно отличается.