LINUX.ORG.RU

bash, for и пробелы в именах файлов


0

2

есть:
files=(`find $direcotry -type f -iname '*.jpg' -or -iname '*.png' -or -iname '*.bmp' `) # поиск файлов и запись их в массив. ищем jpg, png и bmp

потом для массива пускается цикл for i in seq 0 #files; do ...

но если в имени файла есть пробел, bash думает что это два файла..

как это можно исправить?

★★★★★

Например, читать так:

IFS=''
files=(`find $direcotry -type f -iname '*.jpg' -or -iname '*.png' -or -iname '*.bmp' `)

Тогда имена будут разделены '\n', а не пробелом.

GotF ★★★★★ ()

можно поменять IFS
можно использовать, допустим, echo $files | while read line;do bla-bla-bla;done
...

megabaks ★★★★ ()
Ответ на: комментарий от uzbl

ifs=$'\n' перед объявлением переменной (массива) помогло

snoopcat ★★★★★ ()

и на всякий случай...

а для парсинга аргументов скрипта или функции можно делать так:
for arg in «$@»; do echo «$arg»; done

xydo ★★ ()

Я бы просто сохранил вывод find'a в временный файл, а потом спокойно построчно его бы обработал. Но я уверен, ты считаешь позорным создавать временные файлы, даже если это облегчает отладку и поддержку скрипта.

sdio ★★★★★ ()
Ответ на: комментарий от sdio

в /дев/шм сохранить :) Тада аще ништяк... Ну єто если файлов много :)

Jetty ★★★★★ ()

Какая-то у меня подобная задачка была.

Было удобно использовать связку find -print0 | xargs -0

hi_artem ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.