加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 16:18:22 所属栏目:安全 来源:网络整理
导读:从shell脚本中的目录中选择一个随机文件的最好方法是什么? 这里是我在Bash的解决方案,但我会非常感兴趣的一个更便携的(非GNU)版本在Unix适当使用。 dir='some/directory'file=`/bin/ls -1 "$dir" | sort --random-sort | head -1`path=`readlink --canonic
从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 "%sn" "${files[RANDOM % ${#files[@]}]}"

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读