gpt4 book ai didi

用于运行当前目录或其子目录中包含的几个指定扩展名的随机文件的 Bash 脚本

转载 作者:行者123 更新时间:2023-12-04 18:37:55 24 4
gpt4 key购买 nike

我有一个很大的未看过电影库,有时当我终于有时间看一部时,很难选择准确的一部。所以今天为了让自己从选择的痛苦中解脱出来,我决定写一个剧本。一个小时后(我是 bash 新手)我终于提出了解决方案。这里是:

#fill array with relative paths to files
while IFS= read -r -d $'\0'; do
list+=("$REPLY")
done < <(find . -type f -iname '*.mkv' -or -print0 -iname '*.mp4' -print0 -or -iname '*.avi' -print0)

#get files number and generate random namber
numberOfFiles=${#list[@]}
randNumber=$[ 1 + $[ RANDOM % $numberOfFiles ]]

#use random number to get random file path
relativeFilePath=${list[$randNumber]}

#get rid of dot in the beginning
relativeFilePath="${relativeFilePath:1:${#relativeFilePath}-1}"

#get current dir and merge it with relative file path
filePath=${PWD}$relativeFilePath

#execute file in vlc player
vlc "$filePath"

问题是:如何简化代码,或者是否有可能以其他方式做同样的事情?就个人而言,我不喜欢这里如何使用文件扩展名以及使用绝对路径为 vlc 提供内容。

编辑:
假设我们有下一个文件结构:
./horror/movie1.mkv
./horror/movie2.avi
./documentary/bbc/geography/asia/movie3.mkv
./sci-fi/x-man/movie4.mp4

所以有很多子目录

最佳答案

以下将使用 vlc 从当前目录(或子目录)打开一个随机文件(我们假设您的视频收藏中没有非视频文件):

vlc $(find -type f | shuf | head -n 1)

如果您有非视频文件,我们会变得更聪明:
vlc $(find -type f -iname '*.mp4' -o -iname '*.mkv' | shuf | head -n 1)

(你可以看到如何添加更多的扩展)

关于用于运行当前目录或其子目录中包含的几个指定扩展名的随机文件的 Bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35814200/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com