调用 mediainfo 时包含空格的脚本参数

调用 mediainfo 时包含空格的脚本参数

我想创建一个小的 shell 脚本,它会告诉我视频的持续时间,视频的文件名作为参数传递给它。它会是这样的:

$ script_name "file name with spaces.webm" # or any other media file extension

脚本文件类似于

#/bin/bash
SECRET_SAUCE_USING_$1 | mediainfo | grep Duration | sort -u
# maybe SECRET_SAUCE_USING_$1 | xargs -0 mediainfo . . .

在命令行上,这是有效的,也是我希望脚本执行的操作:

$ mediainfo file\ name\ with\ spaces.webm | grep Duration | sort -u

我尝试过使用类似的东西

echo "$1" | sed 's/ /\\ /g' # piped to mediainfo . . .

将文件名中的空格更改为“\”字符对(不带引号)。回声... | sed ...部分有效,但 mediainfo barfs

echo "$1" | tr ' ' '\000' | xargs -0 mediainfo . . .

将空格更改为空值并让 xargs 调用文件名中使用空值而不是空格的 mediainfo。

到目前为止我还没有找到解决方案。 (我实际上使用 zsh,而不是 bash。)非常感谢所有帮助。 Tnx。

答案1

如果您希望脚本的参数 ( $1) 最终作为 mediainfo 的参数,那么只需将其放在那里即可:

# ...
mediainfo "$1" | grep Duration | sort -u
# ...

这适用于脚本的单个参数。更灵活的是,您可以循环遍历脚本的所有参数,并一次将它们提供给 mediainfo:

for file in "$@"
do
  mediainfo "$file" # ...
done

相关内容