Bash 如何从目录中选择随机文件?

Bash 如何从目录中选择随机文件?,bash,Bash,我有一个满是随机文件的目录。其中一些是图片,以.png扩展名结尾。我想创建一个bash脚本,在每次运行时删除一个随机的.png图像。我该怎么做?请解释你的答案(或放上适当的链接),因为我是一个完全的初学者 使用shuf命令创建随机洗牌,并head-1选择最上面的一个 ls -1 *.png | shuf | head -1 或 仅使用bashbuiltins拾取文件: #!/usr/bin/env bash shopt -s nullglob files=(*.png) shopt -u

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

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

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


仅使用
bash
builtins拾取文件:

#!/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"

将所有匹配的文件添加到数组中(请参见),然后使用
$random
变量从数组中随机选取一个文件(该变量每次出现时计算为一个新的随机整数)还有一些数学知识。

到目前为止你都试了些什么?我用shuf命令尝试了一些东西,但无法将其应用到像
ls*.png | shuf-n1 | xargs rm-v--
?这不是一个很好的解决方案,因为我不知道xargs或甚至是“|”的意思ls和shuf中的-1是什么意思?
ls-1
每行列出一个文件
shuf-n1
output 1 shuffled line我尝试了第二个,它给了我shuf:invalid line count:'-1'。我用1替换了最后一个-1,它成功了。非常感谢你,你帮了我很大的忙!
#!/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"