The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"перебор найденных строк"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"перебор найденных строк"  
Сообщение от GHopper email(ok) on 08-Июл-08, 10:25 
Здравствуйте!
Нужно найти все файлы в дирректории и что-нибудь с ними сделать (не суть).
Пробывал двумя способами:

while read path
do
  echo "d"
done < `find /var/www/home/radio/ -name "*.??3"`


for path in `find /var/www/home/radio/ -name "*.??3"`; do
  echo "$path" #| cut -c 5-
done

Первый вместо "d" выводит результат команды find, а второй не понимает имена файлов с пробелами. Подмогните, кто чем сможет...

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "перебор найденных строк"  
Сообщение от phpcoder email(??) on 08-Июл-08, 10:30 
>Здравствуйте!
>Нужно найти все файлы в дирректории и что-нибудь с ними сделать (не
>суть).
>Пробывал двумя способами:
>
>while read path
>do
>  echo "d"
>done < `find /var/www/home/radio/ -name "*.??3"`

Попробуйте так:

find /var/www/home/radio/ -name "*.??3" | while read path; do
    echo d
done

>for path in `find /var/www/home/radio/ -name "*.??3"`; do
>  echo "$path" #| cut -c 5-
>done
>
>Первый вместо "d" выводит результат команды find, а второй не понимает имена
>файлов с пробелами. Подмогните, кто чем сможет...

Что значит "не понимает" ? Ааааа... типа что файл с пробелом в имени расценивается как отдельные файлы? Попробуйте так:


for path in "`find /var/www/home/radio/ -name '*.??3'`"; do
  echo "$path" #| cut -c 5-
done

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "перебор найденных строк"  
Сообщение от phpcoder email(??) on 08-Июл-08, 10:31 
P.S. Вы бы привели задачу полностью. Возможно, её можно решить более элегантно :)


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "перебор найденных строк"  
Сообщение от GHopper email(ok) on 08-Июл-08, 10:52 
>P.S. Вы бы привели задачу полностью. Возможно, её можно решить более элегантно
>:)

мне нужно найти все mp3 файлы в папке и ее подпапках и получить с них теги через mp3info. Всю эту информацию надо потом будет залить в БД. Хочу сделать это ны shell, как обучающий курс.

for path in "`find /var/www/home/radio/ -name '*.??3'`"; do
  echo "$path" | cut -c 5-
done
возвращает все найденное ОДНОЙ строкой! Следовательное cut работает только на начало этой строки (тоесть только на первый найденный путь)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "перебор найденных строк"  
Сообщение от phpcoder email(??) on 08-Июл-08, 11:05 
>мне нужно найти все mp3 файлы в папке и ее подпапках и
>получить с них теги через mp3info. Всю эту информацию надо потом
>будет залить в БД. Хочу сделать это ны shell, как обучающий
>курс.

find /var/www/home/radio -type f -iname '*.mp3'

Это найдёт все mp3-файлы.

Поскольку вы точно не указали какие данные вы будете получать из тегов и как это всё в таблицу загоняться будет, то опишу примерно.

- получили файлы
- для каждого вызывали mp3info с нужными параметрами
- предыдущая команда должна вывести готовые SQL-запросы к БД (INSERT). Это можно попытаться сделать либо с помощью самого mp3info (ищите описаний ключей, кажется, там должно быть что-то вроде printf() подобной строки) или же придётся по пути из обработать sed'ом или awk'ом
- далее все запросы просто передаются в mysql

Примерно так:

find ... | xargs mp3info ... | mysql my_music_database

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "перебор найденных строк"  
Сообщение от GHopper email(ok) on 08-Июл-08, 11:23 
find /var/www/home/radio -type f -iname '*.mp3' -exec mp3info -p "%a - %t" "{}" ";"

выводит то, что надо, но вот как теперь это запихать в БД.
INSERT INTO `table_name`(field_name) VALUE($mp3info_value) WHERE `file`=$find_value
т.е. нужно запихать в таблицу table_name в столбик field_name занчение, возвращаемое mp3info (mp3info_value), причем значение столбца file должно соответствовать имени mp3-файла, с которого мы берем mp3info без пяти первых символов )) Вот как.

Мне кажется тут без цикла не обойтись...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "перебор найденных строк"  
Сообщение от phpcoder email(??) on 08-Июл-08, 11:51 
find /var/www/home/radio -type f -iname '*.mp3' |
    while read FILE; do
        mp3_info=`mp3info -p '%a - %t' "$FILE"`
        file_name=`echo "$FILE" | cut -c 5-`
        printf 'INSERT INTO `table_name`(field_name) VALUE("%s") WHERE `file`="%s"\n' "mp3_info" "$file_name"
    done |
    mysql database

Как-то так.

>Мне кажется тут без цикла не обойтись...

Да может и можно, но:
- потратиться больше времени
- потом будет сложнее дорабатывать
- пониматься тоже будет сложнее

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "перебор найденных строк"  
Сообщение от GHopper email(ok) on 08-Июл-08, 13:08 
>[оверквотинг удален]
>    mysql database
>
>Как-то так.
>
>>Мне кажется тут без цикла не обойтись...
>
>Да может и можно, но:
>- потратиться больше времени
>- потом будет сложнее дорабатывать
>- пониматься тоже будет сложнее

Спасибо за быстрые отклики. Поправил собственные ляпы и все получилось!

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру