Что то всё таки не получается у меня поработать с файлами в скрипте.

Есть код:


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[@]}"

Работает просто превосходно, но совсем не просто сделать рекурсию по вложенным папкам.








 ,






URL записи