bash - 如何使用 FIND 命令处理文件名空间和字符
问题描述
大家好,我正在编写一个 bash 脚本来将多个 mp3 文件合并为一个。该代码工作正常,但无法处理带有空格或字符的文件名。下面是代码。你能告诉我我做错了什么吗?谢谢
for file in $(find . -type f -name "*.mp3" -print0 | xargs -0 ); do
ffmpeg -i "concat:intro.mp3|"$file"|outro.mp3" -acodec copy "${file%.mp3}-".mp3;
done
解决方案
find 有一个-exec
标志,允许您使用搜索结果调用脚本。
例如创建一个简单的辅助脚本 addxtros.sh:
#!/bin/sh
infile=$1
outfile=${infile%.mp3}-.mp3
ffmpeg -i "concat:intro.mp3|${infile}|outro.mp3" -acodec copy "${outfile}"
你可以像这样使用它:
find . -type f -name "*.mp3" -exec ./addxtros.sh {} ";"
推荐阅读
- c# - 如何在 MVC Core 中使用缓存管理器?
- android - React Native 图像阴影未显示在视图中
- python-3.x - 将一个字段与包含逗号分隔的 4 个值的 csv 文件的另一个字段进行比较
- android - 找不到类“com.google.android.material.button.MaterialButton”
- python - 根据元组列表中的第二个元素查找具有前 5 个唯一值的所有项目
- nginx - 如何使用 Nginx 访问 control.unit.sock 以安全地代理 Unit API
- r - 如何从函数外部将 lm 对象中的权重作为变量传递,并将列名作为模型表单中的权重引用?
- python - 在 Python 中找到一个元素的总和
- database - 如何获取 Firebase 集合中的所有文档(包括不存在的祖先文档)?
- postgresql - Postgresql 函数:如何处理 [ IN() 或 ANY() ] 中的空值