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

用ffmpeg在目录树上循环Bash,空格错误?,bash,ffmpeg,find,Bash,Ffmpeg,Find,我试图在目录中分组的多个视频文件上进行交互,ffmpeg返回有关路径的错误,似乎路径已断开,在第一个空格处结束。你能告诉我这里有什么问题吗?文件和目录有空格 $ for f in $(find -type f -name *.mkv); do ffmpeg -n -i "$f" -c:v copy "~/Pobrane/$f" ; done 循环按空间分割路径,并将单词作为条目。如何解决这个问题 $ for f in $(find -type f -name *.mkv); do echo "

我试图在目录中分组的多个视频文件上进行交互,ffmpeg返回有关路径的错误,似乎路径已断开,在第一个空格处结束。你能告诉我这里有什么问题吗?文件和目录有空格

$ for f in $(find -type f -name *.mkv); do ffmpeg -n -i "$f" -c:v copy "~/Pobrane/$f" ; done
循环按空间分割路径,并将单词作为条目。如何解决这个问题

$ for f in $(find -type f -name *.mkv); do echo "$f"; done
./homeworks/2017-04-03
00-54-57
homework3b.mkv
./homeworks/2017-04-03
00-21-36
homework1.mkv
./homeworks/2017-04-03
更换回路 使用

-exec
对每个找到的路径执行以下
ffmpeg
命令,用当前路径替换
{}
通知
find
命令到此结束

引用
'*.mkv'
将文本字符串传递给
查找
,然后查找以
*.mkv
结尾的文件。如果您没有引用字符串,并且工作目录中有一些mkv文件,shell将展开未引用的
*.mkv
,从而在启动
find
之前,找到-type f-name firstFile.mkv secondFile.mkv…

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

创建父目录 如何在ffmpeg调用之前添加
mkdir-p

您可以将
mkdir
ffmpeg
包装在一个函数中,然后:

或:


. 另请看。(另一个有用的资源是。)没关系,我只是自己尝试了一下,似乎没有什么不同。
find -type f -name '*.mkv' -exec ffmpeg -n -i {} -c:v copy ~/Pobrane/{} \;
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"' {} \;
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