2012-02-26 2 views
0

Backstory:Как создать ссылки на пути к файловым файлам в файле?

У меня есть файлы MP3 и FLAC в моей музыкальной коллекции. У меня есть MP3, организованные под музыку/mp3 и FLAC в музыке/flac. Хотя я предпочитаю слушать FLAC-файлы, большая часть моей музыки - MP3. Некоторые из песен в музыке/mp3 - это те же песни, что и в музыке/flac.

Когда мой музыкальный плеер для рабочего стола создает библиотеку музыкального каталога, эти песни дублируются. Я хочу связать свои MP3-файлы, которые уникальны для/music/mp3, в их собственный каталог, чтобы мой музыкальный проигрыватель мог его сканировать и/music/flac. Таким образом, будут воспроизведены все песни, которые у меня есть кодировка FLAC, и уникальные MP3-файлы.

Вопрос:

Я определил, какие песни являются уникальными для музыки/MP3, и у меня есть файл их абсолютных имен путей, разделенных символами новой строки. Как заставить команду ln прокручивать каждую строку (создавая ссылку, например, music/mp3_unique)?

ответ

0

Я не думаю, что ln имеет возможность создавать ссылки из файла, но так как вы используете Баш, вы можете сделать это:

for i in `cat file`;do ln -s $i;done 

где file это имя файла с абсолютным paths

+0

У меня была «духа!» как только я увидел ваше элегантное и простое решение. Точка, в которой я отсутствовала, - это создать файл для создания потока. Благодаря! – cheapous

+0

О да, и второй аргумент ln должен быть целевым каталогом для ссылки. – cheapous

0

Если все файлы находятся в одной файловой системе, вы можете использовать жесткие ссылки, а не мягкие. Это имеет то преимущество, что вам больше не нужно использовать абсолютные имена путей. В этом случае я бы соблазн сделать что-то вроде этого:

Итак ... сказать, что у вас есть файл дерево, которое выглядит примерно так:

/музыка /музыка/mp3 /музыка/FLAC

Создать «scanme» каталог под музыку, а также создавать жесткие ссылки на все музыку, которую вы хотите играть:

mkdir /music/scanme 
cd /music/scanme 
(cat ../mp3/unique.txt; find ../flac) | while read file 
do 
    ln "$file" $(basename "$file") 
done 

Это будет работать, когда имена файлов содержат пробелы, которых прямо петля не будет.

Смежные вопросы