我想在查找找到的文件的某些百分比上运行命令。我会在这里使用 puts 而不是真正的代码。
find . -type f -exec ruby -e "puts '{}' if (rand > 0.2)" \;
我有很多文件。有没有办法在不调用rand甚至使用Ruby的情况下执行此操作?
我考虑过在文件大小上使用 mod X ,因为文件或多或少是随机长度的,但是我无法想办法告诉find在表达式中使用它。
答案 0 :(得分:3)
这会打印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 \;
答案 1 :(得分:0)
我想我找到了一个更好的方法:
find . -type f | ruby -n -e 'puts $_.chop if (rand > 0.5)'
如果你有一个 lot 的文件,那么为每个文件执行一个bash shell可能会占用资源。上面的行开始一个长时间运行的ruby进程,它只是处理来自find的输入。它快得多。