Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: bash и имена файлов с пробелами  (Прочитано 6999 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн 0xEEd

  • Автор темы
  • Любитель
  • *
  • Сообщений: 61
    • Просмотр профиля
bash и имена файлов с пробелами
« : 14 Сентября 2010, 13:11:01 »
Есть ли простой способ обработки списка имен файлов, содержащих пробелы? Например:
for FileName in `find -type f -name "*jpg"`
do
  ...
done
в качестве разделителя используется пробел и подставляемые в FileName значения будут кусками от полных имен. Что делать?
Начал городить огород с временными файлами:
TmpFileList=`mktemp`
find -type f -name "*jpg">$TmpFileList
while read FileName
do
...
done < $TmpFileList
но это очень неуклюже. Как можно проще?

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: bash и имена файлов с пробелами
« Ответ #1 : 14 Сентября 2010, 13:21:48 »
Если внутренность do небольшая, то вероятно проще
find -type f -name "*jpg" -exec commanda {} \;

Оффлайн dieselist

  • Активист
  • *
  • Сообщений: 525
    • Просмотр профиля
    • diesel.pp.ua
Re: bash и имена файлов с пробелами
« Ответ #2 : 14 Сентября 2010, 13:24:09 »
Разделитель можно изменить переопределив переменную IFS. Например, заменив его на символ перевода строки - IFS=$'\n'
тогда твой вывод find будет разбираться построчно а не до пробела
Ubuntu, Gentoo, RHEL, AIX

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: bash и имена файлов с пробелами
« Ответ #3 : 14 Сентября 2010, 13:27:35 »
Это очень хорошая идея.
Добавлю еще.
Конструкцию типа
find ... \;
можно связать трубой с дальнейшими инструкциями, например
find . -name "*.txt" -exec grep "^max" {} \; | wc -l
Будет произведен поиск файлов с расширением txt,
для каждого из них будут искаться строки начинающие с max
и  сосчитается количество таких нахождений.
ЗЫ. Еще можно использовать тройники tee, для экономии процедур нахождения.
Остапа понесло.(ц)
« Последнее редактирование: 14 Сентября 2010, 13:48:17 от alexander.pronin »

Оффлайн 0xEEd

  • Автор темы
  • Любитель
  • *
  • Сообщений: 61
    • Просмотр профиля
Re: bash и имена файлов с пробелами
« Ответ #4 : 14 Сентября 2010, 13:43:30 »
:) спасибо, очень получилось! возьму на вооружение

Оффлайн dieselist

  • Активист
  • *
  • Сообщений: 525
    • Просмотр профиля
    • diesel.pp.ua
Re: bash и имена файлов с пробелами
« Ответ #5 : 14 Сентября 2010, 13:49:27 »
так чей вариант получился-то? :)
Ubuntu, Gentoo, RHEL, AIX

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: bash и имена файлов с пробелами
« Ответ #6 : 14 Сентября 2010, 13:54:13 »
Любой вариант получится, если с ним поковыряться.
Каждая задача имеет n вариантов решения,
а красивых решений значительно меньше. ;D

Оффлайн dieselist

  • Активист
  • *
  • Сообщений: 525
    • Просмотр профиля
    • diesel.pp.ua
Re: bash и имена файлов с пробелами
« Ответ #7 : 14 Сентября 2010, 13:55:43 »
я понимаю, что все предложенные варианты здесь работоспособны.
интересно, что выбрал ТС :)
Ubuntu, Gentoo, RHEL, AIX

Оффлайн 0xEEd

  • Автор темы
  • Любитель
  • *
  • Сообщений: 61
    • Просмотр профиля
Re: bash и имена файлов с пробелами
« Ответ #8 : 14 Сентября 2010, 18:05:20 »
победила дружба! :)
find c "-exec grep" я использовал в другом месте, а тут была принципиальна цикличная обработка списка, потому что он может формироваться не только find'ом но и ls'ом, cat'ом или еще чем. Замена IFS - это восхитительно. :)

--
решено, посему закрыто.
-- kwah
« Последнее редактирование: 19 Сентября 2010, 17:16:58 от Kwah »

 

Страница сгенерирована за 0.018 секунд. Запросов: 23.