Что то всё таки не получается у меня поработать с файлами в скрипте.
Есть код:
i=0
find "/dir" -type f -print0 | while read -r -d '' per1
do
per2="${per1##*/}"
(( i++ ))
dir[$i]="$per2"
done
printf "%s\n" "${dir[@]}"
printf не выведет ничего, так как read запускает свой субшелл и все данные останутся там, пробовал всякие перенаправления ничего не получается. Записывать в файл на диск нельзя. export не поможет так как он экспортирует для потомков, а не для родителей. Можно как то передать данные в переменную-массив в самом скрипте не прибегая к записи в файл на дик?
Если заменить на:
i=0
for per1 in $(find "/dir" -type f)
do
per2="${per1##*/}"
(( i++ ))
dir[$i]="$per2"
done
printf "%s\n" "${dir[@]}"
То тогда если будут файлы с названиями «*, ? » и т.д. то почему то find заносит в переменную один и тот же файл несколько раз, просто команда find отрабатывает нормально, с for-ом получается какая то чепуха.
Вот такая конструкция:
i=0
for per1 in "/dir/*" "/dir/.*" -type f
do
per2="${per1##*/}"
(( i++ ))
dir[$i]="$per2"
done
printf "%s\n" "${dir[@]}"
Работает просто превосходно, но совсем не просто сделать рекурсию по вложенным папкам.