bash – 从shell脚本中的目录中选择随机文件的最佳方法

前端之家收集整理的这篇文章主要介绍了bash – 从shell脚本中的目录中选择随机文件的最佳方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
从shell脚本中的目录中选择一个随机文件的最好方法是什么?

这里是我在Bash的解决方案,但我会非常感兴趣的一个更便携的(非GNU)版本在Unix适当使用。

dir='some/directory'
file=`/bin/ls -1 "$dir" | sort --random-sort | head -1`
path=`readlink --canonicalize "$dir/$file"` # Converts to full path
echo "The randomly-selected file is: $path"

任何人有任何其他想法?

编辑:lhunath是关于解析ls的好点。我想这是由于是否你想要便携或不。如果你有GNU findutils和coreutils,那么你可以做:

find "$dir" -maxdepth 1 -mindepth 1 -type f -print0 \
  | sort --zero-terminated --random-sort \
  | sed 's/\d000.*//g/'

哇,那很有趣!它也匹配我的问题更好,因为我说“随机文件”。 Honsetly虽然,这些天很难想象一个Unix系统部署有安装GNU但不是Perl 5。

files=(/my/dir/*)
printf "%s\n" "${files[RANDOM % ${#files[@]}]}"

并且不解析ls。阅读http://mywiki.wooledge.org/ParsingLs

编辑:祝你好运找到一个非bash解决方案是可靠的。大多数会破坏某些类型的文件名,例如带空格或换行符或破折号的文件名(在纯sh中几乎不可能)。要做到正确没有bash,你需要完全迁移到awk / perl / python / …没有管道输出进一步处理等。

猜你在找的Bash相关文章