使用ffmpeg,错误的空格在目录树上进行Bash循环?

时间:2017-04-16 14:23:59

标签: bash ffmpeg find

我正在尝试对目录中分组的多个视频文件进行交互,并且ffmpeg返回有关路径的错误,似乎路径被破坏,在第一个空格结束。你能指出我这里有什么问题吗?文件和目录有空格。

var splitted = inputString.Split();

循环按空格分割路径并将单词作为条目。如何解决这个问题?

var name = splitted[0];
var number = splitted[1];
var location = splitted[2];

1 个答案:

答案 0 :(得分:3)

更换循环

使用

find -type f -name '*.mkv' -exec ffmpeg -n -i {} -c:v copy ~/Pobrane/{} \;

-exec为每个找到的路径执行以下ffmpeg命令,将{}替换为当前路径。 ;通知find ffmpeg命令在那里结束。

引用'*.mkv'以便将文字字符串传递给find,然后搜索以*.mkv结尾的文件。如果你不引用字符串并在工作目录中放置一些mkv文件,那么在开始*.mkv之前,shell会扩展不带引号的find -type f -name firstFile.mkv secondFile.mkv ...,从而产生find

引用~。不带引号的~会扩展到您的主目录(可能是/home/yourname),但引用的'~'是一个文件名为~的目录/文件。

创建父目录

  

如何在ffmpeg调用之前添加mkdir -p

您可以将mkdirffmpeg打包在一个函数中execute the function

myFunction() {
    mkdir -p "$(dirname "$1")"
    ffmpeg -n -i "$1" -c:v copy ~/Pobrane/"$1"
}
export -f myFunction

find -type f -name '*.mkv' -exec bash -c 'myFunction "$0"' {} \;

use a loop

find . -type f -iname "*.txt" -print0 | while IFS= read -r -d $'\0' file; do
    mkdir -p "$(dirname "$file")"
    ffmpeg -n -i "$file" -c:v copy ~/Pobrane/"$file" 
done