Модераторы: powerfox, ZeeLax
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> bash-скрипт для обработки файлов по маске 
V
    Опции темы
nornad
Дата 6.3.2007, 03:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

Репутация: нет
Всего: 31



В общем, требуется помощь.
Задача: bash-сделать скрипт, который находит все файлы по указанной маске в заданной папке (рекурсивно) и выполняет некоторую команду для каждого найденного файла. В качестве "некоторой команды" вполне сойдёт вывод содержимого файла на консоль (позже я заменю на реальную команду, а сейчас мне важно узнать, как такое вообще можно сделать за счёт bash-скрипта).

P.S. Сам я с линухом почти не знаком, а уж с бэшем пока что не дружу вовсе. smile Поэтому предпочтительнее привести не отдельные строки, скрипт. В общем,  smile  smile 


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
ZeeLax
Дата 6.3.2007, 05:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 4388
Регистрация: 20.8.2006
Где: Алма-Ата

Репутация: 26
Всего: 88



копайтесь в
Код

man find
на предмет ключиков -name и -exec.


--------------------
Utility is when you have one telephone, luxury is when you have two, opulence is when you have three — and paradise is when you have none.
— Doug Larson
PM MAIL WWW ICQ Skype Jabber   Вверх
nornad
Дата 6.3.2007, 05:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

Репутация: нет
Всего: 31



Да, но как потом обрабатывать полученные результаты? Если бы я умел писать бэш-скрипты, то не спрашивал бы помощи - я догадываюсь, что это просто, но поверхностное чтение статей по бэш результата практически не дало. Там поверхностно описывались принципы бэша, а примеры были простейшие, из которых я не смог определить, КАК мне решить свою задачу.


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
Vaulter
Дата 6.3.2007, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: 3
Всего: 22



НАПример
удаляет все файлы с именем *.db в папке db и вложенных:
Код

find . -name *.db -exec unlink {}\;



--------------------
PM MAIL WWW ICQ   Вверх
MAKCim
Дата 6.3.2007, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 21
Всего: 207



Код

#!/bin/bash

# $1 - path
# $2 - mask
# $3 - command
function action {
    for J in $1/*; do   # цикл по всем элементам директории $1
        [ -d $J ] && action $J $2 $3 || { # если текущий элемент ($J) - директория, то рекурсивно вызываем action для нее
            [ `echo $J | grep "$2"` ] && $3 $J # иначе, если имя файла удовлетворяет шаблону, применяем команду, на вход которой подается имя файла
        }
}

action /home/maxim a echo # call function


Это сообщение отредактировал(а) MAKCim - 6.3.2007, 19:34


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
nornad
Дата 6.3.2007, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

Репутация: нет
Всего: 31



Спасибо. А можно прокомментировать код? Интересует смысл следующих конструкций:
[ -d $J ]
[ `echo $J | grep "$2"` ]


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
MAKCim
Дата 6.3.2007, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 21
Всего: 207



nornad
[ -d $J ] - истина, если $J является директорией
[ `echo $J | grep "$2"` ] - значение $J (т. е имя файла) через pipe передаем grep-у, который сравнивает его с шаблоном ($2), если совпало, то результат [ ... ] - истина и выполняется команда за &&, т. е наша команда ($3)

Это сообщение отредактировал(а) MAKCim - 6.3.2007, 19:39


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
nornad
Дата 7.3.2007, 01:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

Репутация: нет
Всего: 31



Огромное спасибо за помощь и разъяснения (сильно не хотелось просто взять чужой скрипт и использовать без понимания, как он работает - гордость и так уже ущемлена).


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Linux/UNIX: Oбщие вопросы"
nickless
Imple
nerezus

В тему здесь вопросы общие - не привязанные к определенному ПО или дистрибутиву BSD/Linux/UNIX.
Например вопросы о выборе ОС для определенных задач (но если Вы просто хотите узнать "Какой дистрибутив лучше", то для этого есть Клуб юнуксоидов).
Общие вопросы по shell-программированию тоже лучше задавать здесь.


  • Вопросы мобильной разработки тут
  • Вы должны соблюдать правила форума.
  • Помните: какой вопрос, такой и ответ. Прежде чем задать вопрос прочитайте вот эту статью на форуме CIT.
  • Оскорблять запрещается.
  • Религиозные войны в Религиозных войнах.
  • Общение "просто так" в Клубе юнуксоидов. В отличие от многих других разделов, здесь разрешается сдержанно оффтопить и юморить в тему.

За интересные статьи, находки, решения, программы и просто реальную помощь будут ставиться + в репу).


В данный момент этот раздел модерируют nerezus, nickless, powerfox, pythonwin, Imple и ZeeLax. Если вы хотите помочь нам, пишите в ПМ и мы обсудим.


Спасибо. И use UNIX or die; С уважением, nerezus, nickless, powerfox, pythonwin, Imple, ZeeLax.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | *NIX системы: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0519 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.