LINUX.ORG.RU

#!/bin/bash

cat $1

или

for file in path/* ; do cat $file done

anonymous
()

простейший (но дефективный) вариант: a=`ls`; b=$(( `echo $a | wc -w` * $RANDOM / 32768 )); echo $a | cut -d' ' -f$b можно немного подсократить. основные дефекты: не обрабатывает правильно файлы с пробельными символами в имени. Не различает файлы и директории. Если кому интересно могу написать команду без указанных недостатков

anonymous
()

Другой вариант: ls -1 | sed -n $((`ls -1 | wc -l` * $RANDOM / 32768 + 1))p Этот правильно обрабатывает файлы с пробелами в имени. правда все еще выдает ошибку если в имени есть перевод строки. Но с такими файлами и mc корректно работать не может.

anonymous
()

Спасибо конечно, работает. Но этот пример пишет имя файло в вывод, а мне нужно чтобы он указывался в параметре программы...

anonymous
()

Нда.... а самому взять все в обратные кавычки и перенести на место параметра тяжело? Например cat `dir=/tmp/run;find $dir -type f -maxdepth 1 | sed -n $(( \`find $dir -type f -maxdepth 1 | wc -l\` * $RANDOM / 32768 + 1))p`

anonymous
()

Кстати, я не упомянул, но я думаю это и так очевидно: этот способ не дает АБСОЛЮТНО равные вероятности. В зависимости от числа файлов в директории вероятность получить на выходе содержимое одного файла будет несколько больше, чем другого. Чем больше файлов, тем хуже. 32768 файлов в директории это абсолютный верхний предел. Для лучших результатов надо использовать другой генератор. например /dev/random

anonymous
()

по поводу аргумента - man xargs

ananas ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.