【问题标题】:How do I select a random file from a directory?如何从目录中选择随机文件?
【发布时间】:2020-08-01 01:13:43
【问题描述】:

我有一个充满随机文件的目录。其中一些是图片并以.png 扩展名结尾。我想创建一个 bash 脚本,每次运行它时都会删除一个随机的 .png 图像。我该怎么做呢?请解释您的答案(或放置适当的链接),因为我是一个完整的初学者。

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 我用 shuf 命令尝试了一些东西,但无法让它工作
  • 类似ls *.png | shuf -n 1 | xargs rm -v --?虽然不是一个很好的解决方案
  • 我只需要在终端中输入,因为我不知道 xargs 甚至 '|' 的意思是什么

标签: bash


【解决方案1】:

使用shuf 命令创建随机随机播放,使用head -1 选择最上面的一个

ls -1 *.png |  shuf | head -1

ls -1 *.png | shuf -n 1

【讨论】:

  • ls和shuf中的-1有什么作用?
  • ls -1 每行列出一个文件; shuf -n 1 输出 1 行改组
  • 我尝试了第二个,它给了我 shuf: invalid line count: ‘-1’。我用 1 替换了最后一个 - 1 并且它起作用了。
  • 非常感谢,你帮了大忙!
【解决方案2】:

仅使用 bash 内置函数来选择文件:

#!/usr/bin/env bash

shopt -s nullglob
files=(*.png)
shopt -u nullglob
if [[ ${#files[@]} -eq 0 ]]; then
  echo "No matching files!"
  exit
fi
file=${files[$((RANDOM % ${#files[@]}))]}
echo "Deleting $file"
rm -f "$file"

将所有匹配的文件添加到一个数组中(参见How do I assign ls to an array in linux bash),然后使用$RANDOM 变量(每次出现时都会计算为一个新的随机整数)和一些数学运算从中选择一个随机文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-03
    相关资源
    最近更新 更多