Bash shuf命令不是';在find-exec中不随机?

Bash shuf命令不是';在find-exec中不随机?,bash,unix,terminal,zsh,Bash,Unix,Terminal,Zsh,我希望看到.flac文件的名称,然后是/backgrounds中一个文件的随机名称 相反,我看到的是: find dev-other -iname '*.flac' -exec echo {} \; -exec echo "$(ls -p backgrounds | grep -v / | gshuf -n 1)" \; 对于find找到的每个文件,从/backgrounds中选择相同的“随机”文件 如何在find-exec中选择随机文件?shell正在扩展 dev-other/4515/11

我希望看到
.flac
文件的名称,然后是
/backgrounds
中一个文件的随机名称

相反,我看到的是:

find dev-other -iname '*.flac' -exec echo {} \; -exec echo "$(ls -p backgrounds | grep -v / | gshuf -n 1)" \;
对于
find
找到的每个文件,从
/backgrounds
中选择相同的“随机”文件

如何在find
-exec
中选择随机文件?

shell正在扩展

dev-other/4515/11057/4515-11057-0087.flac
Wind.mp3
dev-other/4515/11057/4515-11057-0091.flac
Wind.mp3
dev-other/4515/11057/4515-11057-0029.flac
Wind.mp3
dev-other/4515/11057/4515-11057-0028.flac
Wind.mp3
dev-other/4515/11057/4515-11057-0090.flac
Wind.mp3
dev-other/4515/11057/4515-11057-0069.flac
Wind.mp3
dev-other/4515/11057/4515-11057-0086.flac
Wind.mp3
dev-other/4515/11057/4515-11057-0100.flac
Wind.mp3
dev-other/4515/11057/4515-11057-0045.flac
Wind.mp3
在执行
find
之前返回单个字符串,它会尽职尽责地调用
每次回显“相同的字符串”

获取所需内容的一种方法是每次在新shell中运行
echo
,例如

"$(ls -p backgrounds | grep -v / | gshuf -n 1)"
或者,不要尝试在
查找
中执行此工作-其他工具更适合。例如,
awk
可以轻松地传递数据,还可以在每一行上运行命令

find dev-other -iname '*.flac' -print \
    -exec sh -c 'ls -p backgrounds | grep -v / | gshuf -n 1' \;
外壳正在膨胀

dev-other/4515/11057/4515-11057-0087.flac
Wind.mp3
dev-other/4515/11057/4515-11057-0091.flac
Wind.mp3
dev-other/4515/11057/4515-11057-0029.flac
Wind.mp3
dev-other/4515/11057/4515-11057-0028.flac
Wind.mp3
dev-other/4515/11057/4515-11057-0090.flac
Wind.mp3
dev-other/4515/11057/4515-11057-0069.flac
Wind.mp3
dev-other/4515/11057/4515-11057-0086.flac
Wind.mp3
dev-other/4515/11057/4515-11057-0100.flac
Wind.mp3
dev-other/4515/11057/4515-11057-0045.flac
Wind.mp3
在执行
find
之前返回单个字符串,它会尽职尽责地调用
每次回显“相同的字符串”

获取所需内容的一种方法是每次在新shell中运行
echo
,例如

"$(ls -p backgrounds | grep -v / | gshuf -n 1)"
或者,不要尝试在
查找
中执行此工作-其他工具更适合。例如,
awk
可以轻松地传递数据,还可以在每一行上运行命令

find dev-other -iname '*.flac' -print \
    -exec sh -c 'ls -p backgrounds | grep -v / | gshuf -n 1' \;

我怀疑可能是这样,但我不知道我可以用一个单独的外壳来绕过它。“还有比这更简洁的方法吗?”Onlygusti给出了另一种选择。我怀疑可能是这样,但我不知道我可以用一个单独的外壳来绕过它。“还有比这更简洁的方法吗?”给出的Onlygusti替代方案。