所以,我在一台 Linux 机器上有一个 bash 脚本,它为我编译了一堆视频,它正在运行一个使用 Linux Mint 的 SFTP 服务器。我还有一台 Windows 10 PC,它可以使用 CygWin(比 Windows 10 的 bash 更好)进行更快的编码,并且可以通过程序检测 SFTP 驱动器。我运行该脚本,它指出我要编码的视频文件不存在,即使它在 Linux PC 上运行也是如此。我将这一行添加到脚本中,它确实更改了 CygWin 上的根目录。
rootdir='/cygdrive/x'
if [ ! -d "$rootdir" ];then rootdir='';fi
我要编码的文件名中有空格,我注意到当我转到它们所在的目录并运行 ls
时,CygWin 添加了单引号并转义了文件名,而Linux Mint 上的 Bash 不会那样做。我想要做的是能够从 Cygwin 在 Windows 机器上运行脚本,这样我就可以比 Linux 机器更快地编码视频,但我不确定如何让 CygWin 像 Linux PC 那样正确检测文件。
下面是一些示例代码:
#!/bin/bash
cudr="`pwd`";rootdir='/cygdrive/x'
if [ ! -d "$rootdir" ];then rootdir='';fi
mkdir -p "op"
ffmpeg -i "$cudr/a dog.mp4" "$cudr/op/1.mp4"
ffmpeg -i "$cudr/the cat's fat.mp4" "$cudr/op/2.mp4"
这在 Linux PC 上运行良好,但在 CygWin 中运行时,ffmpeg 将声明未找到输入文件,即使它在 ls 中但已转义。
最佳答案
您的代码可能过于简单了。按照目前的情况,您可以只使用隐式当前目录,而且它都是相对的。 (我还删除了 $rootdir
因为你不使用它):
#!/bin/bash
mkdir -p "op"
ffmpeg -i "a dog.mp4" "op/1.mp4"
ffmpeg -i "the cat's fat.mp4" "op/2.mp4"
另请注意,pwd
命令返回的当前工作目录也存储为 $PWD
,因此您无需分配它,除非您将更改目录,并且您想记住原始目录。
假设您的代码比您显示的更多,并且您确实需要绝对路径,我相信您想要使用cygpath .我的 Cygwin-fu 很生疏,但我想你想要这样的东西:
mkdir -p "op"
ffmpeg -i "$(cygpath -w "$cudr/a dog.mp4")" "$(cygpath -w "$cudr/op/1.mp4")"
ffmpeg -i "$(cygpath -w "$cudr/the cat's fat.mp4")" "$(cygpath -w "$cudr/op/2.mp4")"
(不要介意语法高亮会弄乱这一点。shell 理解 $(…)
命令替换中的引号与其外部的引号不同,因此您可以嵌套一个深度。)
关于linux - Cygwin 未检测到 Linux PC 检测到的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44851932/