这个想法是在 KDE 启动期间播放“问候”声音文件。
例如,一个文件夹中会有 10 个音频文件。假设命名为1.ogg
2.ogg
3.ogg
etc。
实际播放的文件名为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
太简单了!感谢大家的帮助!!!