创建一个简单的脚本,从一组文件中随机选择一个文件进行重命名

创建一个简单的脚本,从一组文件中随机选择一个文件进行重命名

这个想法是在 KDE 启动期间播放“问候”声音文件。

例如,一个文件夹中会有 10 个音频文件。假设命名为1.ogg 2.ogg 3.oggetc。

实际播放的文件名为greetings.ogg

我如何随机取出其中一个文件并将其重命名greetings.ogg而不丢失原始 10 个文件?

我已尽最大努力,但结果却惨败。

答案1

您不能同时“重命名”一个文件和“不丢失原始文件”,您必须将man cp随机选择的原始文件复制()到greetings.ogg,例如:

# select among 0.ogg .. 9.ogg
cp $(( $RANDOM % 10 )).ogg greetings.ogg

阅读后man bash,您可能想要初始化$RANDOM

答案2

如果你的文件不一定使用适合使用 shell$RANDOM变量的简单算术方案来命名,那么另一种选择是使用shuf

shopt -s extglob

cp -- "$(printf '%s\n' !(greeting).ogg | shuf -n 1)" greeting.ogg

ksh 样式的扩展 glob!(greeting).ogg避免将现有文件复制到其自身 - 您可以通过将文件复制到其他目录来避免这种情况。

答案3

一个更优雅的解决方案(正如评论中所建议的那样)金农加峡谷詹姆斯·S。),可以使用符号链接,如下所示:

#!/bin/bash

# Select among ten files at random and make a renamed copy inside /home/$user

ln -sf $(( $RANDOM % 10)).mp3 /home/x/greetings.mp3

笔记ln两个都快点在磁盘使用方面,比更高效cp

请注意使用-f选项覆盖任何指向前一个问候语的链接 - 请参阅创建符号链接 - 如果存在则覆盖


或者,完全避免使用$RANDOM(和bash),而改用shuf

#!/bin/sh

rand=`shuf -i 1-10 -n 1`
ln -sf ${rand}.mp3 /home/x/greetings.mp3

用法shuf取自于此回答生成特定范围内的随机数)。

答案4

经过长时间的搜索,我终于明白了。太简单了!

我在我的/home/$user/目录中创建了一个名为greetingsTest 的文件夹,所以它看起来像; /home/$user/greetingsTest

里面有 10 个.mp3文件(也许有一天我会将其扩大到 20 个),还有一个名为的文件,randomizer.sh如下所示;

#!/bin/bash

###///// select among ten files at random and make a renamed copy inside /home/$user

cp $(( $RANDOM % 10)).mp3 /home/x/greetings.mp3

太简单了!感谢大家的帮助!!!

相关内容