Використання 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=$'\0' ; array=( $( cat ) ) ; echo ${#array[@]} )
Набагато більш загальне запитання може бути: як я можу робити корисні речі зі списками файлів у bash?