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 ★★★★★
()

>> seq 0 #files

in $files

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 ★★★★★
()

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

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

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