URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 7466
[ Назад ]

Исходное сообщение
"перебор найденных строк"

Отправлено GHopper , 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, а второй не понимает имена файлов с пробелами. Подмогните, кто чем сможет...


Содержание

Сообщения в этом обсуждении
"перебор найденных строк"
Отправлено phpcoder , 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


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



"перебор найденных строк"
Отправлено GHopper , 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 работает только на начало этой строки (тоесть только на первый найденный путь)


"перебор найденных строк"
Отправлено phpcoder , 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


"перебор найденных строк"
Отправлено GHopper , 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 без пяти первых символов )) Вот как.

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


"перебор найденных строк"
Отправлено phpcoder , 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

Как-то так.

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

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


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

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