[bash] пролистать вывод find

yroslavasako

В скрипте потребовалось перебрать некоторые найденные значения:
FILES=$(find ./ -print)for i in $FILES do    echo $idone
Проблема в том, что он пробел тоже считает раздельным символом. Как правильно перебирать файлы, включае те, которые имеют пробел в названии?

alfadred

find . -exec echo {} \;

yroslavasako

та же самая фигня. тоже пробелы идут отдельной строкой

tokuchu

man find:

...
If no expression is given, the expression -print is used (but you
should probably consider using -print0 instead, anyway).
...
-print0
True; print the full file name on the standard output, followed
by a null character (instead of the newline character that
-print uses). This allows file names that contain newlines or
other types of white space to be correctly interpreted by pro‐
grams that process the find output. This option corresponds to
the -0 option of xargs.

alfadred

та же самая фигня. тоже пробелы идут отдельной строкой
Не, ты не понял.
Это вместо всего твоего куска
Соответственно, можно запускать не echo, а что-нибудь свое.

yroslavasako

блин, разумеется, я эхо выставил как затычку. Мне нужно из баш скрипта
  • найти все файлики в определённой директории
  • для каждого файлика выполнить некоторую процедуру или последовательность действий

salamander

лови ссылку, найденную гуглом
http://www.cyberciti.biz/tips/handling-filenames-with-spaces...
#!/bin/bash

find . -print0 | while read -d $'\0' file
do
echo "$file"
done

apl13

Но это локальное действие. Интегральные характеристики посчитать оно не позволит. Как ты, например, ексеком сосчитаешь, сколько файлов называются "Richard J. Farrows' last will (current draft).pdf"?

yroslavasako

спасибо, всё запахало. Только вот все усилия оказались напрасны: я научил /etc/init.d/dictd добавлять словари с пробелами в названии. Оказалось сам dictd не умеет такие названия в файле-конфиге парсить.

doublemother

Устанавливаешь переменную IFS в соответствующий разделитель (в твоем случае \n):
inquisitia-nout ~/Документы $ for i in `find .`; do echo $i; done | wc -l
156
inquisitia-nout ~/Документы $ IFS=$'\n'
inquisitia-nout ~/Документы $ for i in `find .`; do echo $i; done | wc -l
59

salamander

А что тебе мешает в том же цикле переименовывать словари заменяя пробелы на, скажем, подчеркивания?

tokuchu

Оказалось сам dictd не умеет такие названия в файле-конфиге парсить.
А если в кавычках?

elenangel

вот еще посмотри http://gz.kinfo.ru/Forum/Thread/8e677071-cc49-4f28-ae7b-2774...
из неупомянутых тут вариантов там предложили xargs

tokuchu

из неупомянутых тут вариантов там предложили xargs
Если сделаешь поиск xargs по странице, то обнаружишь, что это не так. :p

elenangel

да, строго говоря упомянули в цитате из доков. но это какое-то слабое упоминание. я например по диагонали тред просмотрел и примера использования xargs не заметил.

yroslavasako

А что тебе мешает в том же цикле переименовывать словари заменяя пробелы на, скажем, подчеркивания?
ну если другого метода не найду, то пойду на модификацию имён файлов. Но не хотелось бы

macrophage

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

tokuchu

переменную с именем файла в кавычки попробуй взять.
Никто не читает мои комментарии. Пойду поплачусь в уголке. :grin:

apl13

Кстати, кто-нибудь читает твои комментарии? :book:

yroslavasako

А если в кавычках?
они и были в кавычках

elenangel

Никто не читает мои комментарии. Пойду поплачусь в уголке. :grin:
Аватарку сделай, хотя бы имени Малевича. Может, тупо не замечают.

yolki

и я читаю

tokuchu

Аватарку сделай
Может действительно уже пора. Не в свете вопроса, а так похоже, что это уже не дань моде, а чуть ли не необходимость. :)

tokuchu

Хмм. А кстати как поставить аватарку, которая уже загружена раньше, чтобы дублировать её?
Оставить комментарий
Имя или ник:
Комментарий: