У меня есть каталог с большим количеством файлов.
./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 (), инициированная findEPIPE, получает ошибку «Broken pipe», ОС отправляет findSIGPIPE. Прежде чем 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. Ошибка в другой теме, которую вы упоминаете, выглядит совсем иначе и действительно отличается.