PDA

Просмотр полной версии : random sort и не только


copyhold
10.06.2007, 06:06
как сделать типа такого:

ls someMusicDirectory | sort RANDOM | mplayer -playlist -

т.е. взять все файлы из какой то директории и случайно их отсортировать?
Более общий случай-файлы из нескольких директорий (вместе с полными путями (что само по себе вопрос)) и случайно их сортировать.

AlexZ75
10.06.2007, 06:16
copyhold,
Мона в перле...

Telepoozeeck
10.06.2007, 09:48
mplayer -shuffle
Не?

copyhold
10.06.2007, 09:49
ха! - в перле....

в перле - оно понятно что можно. А без перла?

copyhold
10.06.2007, 09:52
mplayer -shuffle
Гениально!

Telepoozeeck
10.06.2007, 09:55
вообще сам по себе sort random это сильно сказано:) сорт это сортировка по какому то критерию. а random - случайно. некоторое противоречие. :)
не. ну можно конечно отсортировать по номеру айноуда, а потом сделать оук принт на имя файла, но это уже не рандом :p:

Telepoozeeck
10.06.2007, 09:56
короче я не знаю чё ты там хочешь от несчастного мплеера. но не думаю что он тупее винампа :D
http://www.mplayerhq.hu/DOCS/man/en/mplayer.1.html

copyhold
10.06.2007, 10:04
короче я не знаю чё ты там хочешь
не-е-е-е! я серьёзно. -shuffle работает на ура

Zigmar
11.06.2007, 16:45
Я для этих целей такой скрипт написал (называется shuffle, живет в ~/bin)

#!/usr/bin/perl -w

if ($ARGV[0] and $ARGV[0] eq '--help'){
die "Reads lines from the files supplied as parameters or from standart input and outputs them (to stdout) in randomized
order.\n";
}

push(@lines,$_) while(<>);

for ($i = 0; $i < @lines; $i++) {
$other = int(rand(@lines));
($lines[$i],$lines[$other])=($lines[$other],$lines[$i]);
}

print for (@lines);

Пример:
[pavel@pavel-lnx ~]
$ seq 1 10
1
2
3
4
5
6
7
8
9
10
[pavel@pavel-lnx ~]
$ seq 1 10 | shuffle
1
5
3
6
7
4
10
9
8
2