You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本中使用find处理含空格与单引号的文件夹名失败

批量生成ffplay播放脚本的问题与解决方法

我用Bash 5.*编写了make-ffplay-script脚本,用来生成能播放指定文件夹内音视频文件的脚本,其核心逻辑函数如下:

ffprobe -hide_banner 2>&1 "$*" |grep Stream|grep "Video:" >/dev/null
if [ $? -eq 0 ]; then
    # 返回0表示是视频文件,使用默认播放参数
    ffplay -autoexit -hide_banner -fs -i "$*"
else
    # 返回非0表示是音频文件,调整播放参数
    ffplay -autoexit -hide_banner -showmode waves -x 500 -y 150 -i "$*"
fi
}

现有脚本的限制

  • 能正常处理末尾带/的文件夹名,但开头带./的文件夹名存在问题
  • 仅支持相对路径,必须保证目标文件夹和生成的播放脚本在同一目录下,才能正常播放其中的文件

调用问题

手动调用时,通过单引号、双引号或转义符可以正确处理含空格或单引号的文件夹名(不存在含双引号、换行或空字节的文件夹/文件名)。但尝试用find . -type d -maxdepth 1 -mindepth 1批量获取子文件夹并传入脚本时,循环读取find结果会拆分带空格的文件夹名,导致生成的myfindloop.sh内容错误。

我期望生成的myfindloop.sh内容如下:

make-ffplay-script "testdir's space"
make-ffplay-script "testdir with space"
make-ffplay-script "testdir"

解决方案

感谢@pjh提供的有效方法,使用以下命令即可实现需求:

for d in */ ; do echo make-ffplay-script "$d" ; done > myfindloop.sh 

也可以使用printf方法实现,生成myfindloop.sh后需要执行chmod a+x myfindloop.sh赋予执行权限。


内容的提问来源于stack exchange,提问作者Rava

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 10:34:51