Здравствуйте!
Нужно найти все файлы в дирректории и что-нибудь с ними сделать (не суть).
Пробывал двумя способами: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, а второй не понимает имена файлов с пробелами. Подмогните, кто чем сможет...
>Здравствуйте!
>Нужно найти все файлы в дирректории и что-нибудь с ними сделать (не
>суть).
>Пробывал двумя способами:
>
>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
P.S. Вы бы привели задачу полностью. Возможно, её можно решить более элегантно :)
>P.S. Вы бы привели задачу полностью. Возможно, её можно решить более элегантно
>:)мне нужно найти все mp3 файлы в папке и ее подпапках и получить с них теги через mp3info. Всю эту информацию надо потом будет залить в БД. Хочу сделать это ны shell, как обучающий курс.
for path in "`find /var/www/home/radio/ -name '*.??3'`"; do
echo "$path" | cut -c 5-
done
возвращает все найденное ОДНОЙ строкой! Следовательное cut работает только на начало этой строки (тоесть только на первый найденный путь)
>мне нужно найти все 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
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 без пяти первых символов )) Вот как.Мне кажется тут без цикла не обойтись...
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Как-то так.
>Мне кажется тут без цикла не обойтись...
Да может и можно, но:
- потратиться больше времени
- потом будет сложнее дорабатывать
- пониматься тоже будет сложнее
>[оверквотинг удален]
> mysql database
>
>Как-то так.
>
>>Мне кажется тут без цикла не обойтись...
>
>Да может и можно, но:
>- потратиться больше времени
>- потом будет сложнее дорабатывать
>- пониматься тоже будет сложнееСпасибо за быстрые отклики. Поправил собственные ляпы и все получилось!