Захват результатов поиска. -print0 в массив bash

С помощьюfind . -print0 кажется единственным безопасным способом получения списка файлов в bash из-за возможности имен файлов, содержащих пробелы, переводы строки, кавычки и т. д.

Однако я испытываю трудности с тем, чтобы фактически сделать вывод find полезным в bash или с другими утилитами командной строки. Единственный способ, которым мне удалось использовать выходные данные, - это передать их в perl и изменить IFS в perl на null:

find . -print0 | perl -e '$/="\0"; @files=<>; print $#files;'

Этот пример печатает количество найденных файлов, избегая опасности появления новых строк в именах файлов, приводящих к искажению счетчика, как это происходит с:

find . | wc -l

Поскольку большинство программ командной строки не поддерживают ввод с разделителями, равными нулю, я считаю, что лучше всего было бы захватить выводfind . -print0 в массиве bash, как я делал в приведенном выше фрагменте perl, а затем продолжите выполнение задачи, какой бы она ни была.

Как я могу это сделать?

Это не работает:

find . -print0 | ( IFS=

Гораздо более общий вопрос может быть:How can I do useful things with lists of files in bash?

\0' ; array=( $( cat ) ) ; echo ${#array[@]} )

Гораздо более общий вопрос может быть:How can I do useful things with lists of files in bash?

Ответы на вопрос(12)

Ваш ответ на вопрос