列出目录中的 X 个随机文件

列出目录中的 X 个随机文件

有没有办法使用标准 Linux 命令从目录中列出一组(例如 30 个)随机文件? (在zsh

最上面的答案描述了这里不适合我(sort无法识别该选项-R

答案1

尝试将ls输出通过管道传输到shuf,例如

$ touch 1 2 3 4 5 6 7 8 9 0
$ ls | shuf -n 5
5
9
0 
8
1

-n标志指定您想要多少个随机文件。

答案2

既然你提到了 zsh:

rand() REPLY=$RANDOM
print -rl -- *(o+rand[1,30])

您可以替换print为 sayogg123*say**/*.ogg

答案3

一个简单的解决方案避免解析 ls并且也适用于空格:

shuf -en 30 dir/* | while read file; do
    echo $file
done

答案4

只使用 Zsh 的单行代码:

files=(*); for x in {1..30}; do i=$((RANDOM % ${#files[@]} + 1)); echo "${files[i]}"; done

Bash 中也是如此,其中数组索引从零开始:

files=(*); for x in {1..30}; do i=$((RANDOM % ${#files[@]})); echo "${files[i]}"; done

请注意,这两个版本都不考虑重复项。

相关内容