статистическая находка -exec - PullRequest
1 голос
/ 16 февраля 2011

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

find . -type f -exec ruby -e "puts '{}' if (rand > 0.2)" \;

У меня много файлов. Есть ли способ сделать это без вызова rand или даже без использования Ruby?

Я думал об использовании mod X для размера файла, так как файлы имеют более или менее произвольную длину, но я не могу найти способ сказать find для использования этого в выражении.

Ответы [ 2 ]

3 голосов
/ 16 февраля 2011

Это печатает 50% файлов:

   find . -exec bash -c "echo -n \$RANDOM | tail -c 1 | grep -q [0-4]" \; -print

Чтобы выполнить что-то, это должно сработать:

   find . -exec bash -c "echo -n \$RANDOM | tail -c 1 | grep -q [0-4]" \; -exec my_command \;
0 голосов
/ 16 марта 2011

Я думаю, что нашел лучший способ:

find . -type f | ruby -n -e 'puts $_.chop if (rand > 0.5)' 

Если у вас есть серия файлов, исключение оболочки bash для каждого из них может затратить ресурсы. Приведенная выше строка запускает один длительный процесс ruby, который просто обрабатывает входные данные из find. Это намного быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...