Использование find . -print0
представляется единственным безопасным способом получения списка файлов в bash из-за возможности имен файлов, содержащих пробелы, символы новой строки, кавычки и т.д.
Тем не менее, мне нелегко на самом деле сделать вывод вывода полезным в bash или с другими утилитами командной строки. Единственный способ, которым я смог использовать выход, - это связать его с perl и изменить perl IFS на null:
find . -print0 | perl -e '$/="\0"; @files=<>; print $#files;'
В этом примере печатается количество найденных файлов, исключая опасность появления новых строк в именах файлов, искажающих счетчик, что происходит с помощью:
find . | wc -l
Поскольку большинство программ командной строки не поддерживают ввод с нулевым ограничением, я считаю, что лучше всего было бы записать вывод find . -print0
в массив bash, как это было сделано в фрагменте perl выше, а затем продолжайте задание, каким бы оно ни было.
Как я могу это сделать?
Это не работает:
find . -print0 | ( IFS=$'\0' ; array=( $( cat ) ) ; echo ${#array[@]} )
Более общий вопрос может быть следующим: Как я могу делать полезные вещи со списками файлов в bash?