首页 > 解决方案 > 如何使用 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

标签: bashfind

解决方案


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 {} ";"

推荐阅读