Cygwin 未检测到 Linux PC 检测到的文件
Cygwin not detecting files that a Linux PC detects
所以,我在 Linux 机器上有一个 bash 脚本,可以为我编译一堆视频,它是 运行 使用 Linux 连接 SFTP 服务器薄荷。我还有一台 Windows 10 PC,它可以使用 CygWin 进行更快的编码(比 Windows 10 的 bash 更好),并且可以通过程序检测 SFTP 驱动器。我 运行 脚本,它指出我要编码的视频文件不存在,即使它在 Linux PC 上工作。我将这一行添加到脚本中,它确实更改了 CygWin 上的根目录。
rootdir='/cygdrive/x'
if [ ! -d "$rootdir" ];then rootdir='';fi
我要编码的文件名中有空格,我注意到当我转到它们所在的目录时 运行 ls
,CygWin 添加了单引号并转义了文件名,而 Bash on Linux Mint 不这样做。我想做的是能够 运行 来自 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 中 运行ning 时,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 机器上有一个 bash 脚本,可以为我编译一堆视频,它是 运行 使用 Linux 连接 SFTP 服务器薄荷。我还有一台 Windows 10 PC,它可以使用 CygWin 进行更快的编码(比 Windows 10 的 bash 更好),并且可以通过程序检测 SFTP 驱动器。我 运行 脚本,它指出我要编码的视频文件不存在,即使它在 Linux PC 上工作。我将这一行添加到脚本中,它确实更改了 CygWin 上的根目录。
rootdir='/cygdrive/x'
if [ ! -d "$rootdir" ];then rootdir='';fi
我要编码的文件名中有空格,我注意到当我转到它们所在的目录时 运行 ls
,CygWin 添加了单引号并转义了文件名,而 Bash on Linux Mint 不这样做。我想做的是能够 运行 来自 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 中 运行ning 时,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 明白 $(…)
命令替换中的引号与它外面的引号不同,所以你可以嵌套一个深。)