Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cygwin未检测Linux PC检测到的文件_Linux_Bash_Cygwin - Fatal编程技术网

Cygwin未检测Linux PC检测到的文件

Cygwin未检测Linux PC检测到的文件,linux,bash,cygwin,Linux,Bash,Cygwin,所以,我在Linux机器上有一个bash脚本,它为我编译了一堆视频,它使用LinuxMint运行一个SFTP服务器。我还有一台Windows10PC,它可以使用CygWin进行更快的编码(比Windows10的bash更好),并且可以通过程序检测SFTP驱动器。我运行这个脚本,它声明我想要编码的视频文件不存在,即使它在Linux PC上可以工作。我在脚本中添加了这一行,它确实更改了CygWin上的根目录 rootdir='/cygdrive/x' if [ ! -d "$rootdir" ];t

所以,我在Linux机器上有一个bash脚本,它为我编译了一堆视频,它使用LinuxMint运行一个SFTP服务器。我还有一台Windows10PC,它可以使用CygWin进行更快的编码(比Windows10的bash更好),并且可以通过程序检测SFTP驱动器。我运行这个脚本,它声明我想要编码的视频文件不存在,即使它在Linux PC上可以工作。我在脚本中添加了这一行,它确实更改了CygWin上的根目录

rootdir='/cygdrive/x'
if [ ! -d "$rootdir" ];then rootdir='';fi
我想要编码的文件名中有空格,我注意到当我转到它们所在的目录并运行
ls
,CygWin添加单引号并转义文件名,而LinuxMint上的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
,因为您不使用它):

还要注意的是,当前工作目录(由
pwd
命令返回)也存储为
$pwd
,因此您不需要分配它,除非您要更改目录并且希望记住原始目录

假设您的代码中有比您所展示的更多的内容,并且您确实需要绝对路径,我相信您希望使用。我的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知道命令替换内部的引号与外部的引号不同,因此您可以嵌套一个深引号。)

您的代码可能过于简化。目前,您只需使用隐式的当前目录,它是相对的。(我还删除了
$rootdir
,因为您不使用它):

还要注意的是,当前工作目录(由
pwd
命令返回)也存储为
$pwd
,因此您不需要分配它,除非您要更改目录并且希望记住原始目录

假设您的代码中有比您所展示的更多的内容,并且您确实需要绝对路径,我相信您希望使用。我的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知道
$(…)
命令替换中的引号与它外部的引号不同,因此可以嵌套一个深引号。)

Cygwin
ls
可能会用引号打印它们,但这只是为了您和人类的利益。无论如何,您都不应该解析
ls
输出,因此,如果您向我们展示您的代码以及有关您尝试执行的操作的更多信息,我们可能会提供帮助。(请参阅)@EricRenouf我添加了示例代码。@EricRenouf Cygwin的
ls
默认情况下不会这样做,他的帖子中也没有任何内容表明他正在解析
ls
的输出。我怀疑文件名中可能有额外的单引号。原始海报可能希望使用Windows资源管理器或Windows命令提示符下的
dir
命令来找出这些文件的实际名称。@RossRidge我认为cygwin的
ls
的最新版本在默认情况下确实可以做到这一点,但我同意这里的示例代码,这看起来不是问题所在,如果ffmpeg不是cygwin程序,它将不理解“/”但对于目录级,它希望“\”,cygwin
ls
可能会用引号将它们打印出来,但这只是为了人类的利益。无论如何,您都不应该解析
ls
输出,因此,如果您向我们展示您的代码以及有关您尝试执行的操作的更多信息,我们可能会提供帮助。(请参阅)@EricRenouf我添加了示例代码。@EricRenouf Cygwin的
ls
默认情况下不会这样做,他的帖子中也没有任何内容表明他正在解析
ls
的输出。我怀疑文件名中可能有额外的单引号。原始海报可能希望使用Windows资源管理器或Windows命令提示符下的
dir
命令来找出这些文件的实际名称。@RossRidge我认为cygwin的
ls
的最新版本在默认情况下确实可以做到这一点,但我同意这里的示例代码,这看起来并不是问题所在,如果ffmpeg不是cygwin程序,则不会理解目录级别的“/”而是“\”,我刚刚使用了变量作为示例,因为在实际代码中,文件实际放在与脚本不同的目录中。rootdir还用于从cygwin内部识别远程机器的根。这是有意义的,也是预期的。
“$(cygpath-w“$blah”)”
对您有用吗?我刚刚使用了变量作为示例,因为在实际代码中,文件实际上放置在与脚本不同的目录中。rootdir还用于从cygwin内部识别远程机器的根。这是有意义的,也是预期的。
“$(cygpath-w“$blah”)”
对你有用吗?