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

标签 linux bash cygwin

所以,我在一台 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/

相关文章:

sql-server - 使用 T-SQL 在 Linux 上获取 sql server 默认备份文件夹

django:mysql:error(1045, "Access denied for user ' root' @'localhost' (使用密码: NO)")

c++ - 从 MySQL 获取 UTF-8 数据到 Linux C++ 应用程序

linux - sudo 用户的 Ansible env 变量不同

git - 网络启动 SSHD HELPMSG 3534

windows - 从上下文菜单中删除 "Bash Prompt Here"

c++ - cygwin 不包含 mysql.h .. 我怎样才能在 cygwin 中得到它?

非数字或字母的 Bash 范围

python - mp3 音频从交互式 python 播放,但不是从 bash 播放

linux - 在运行使用 exec 和 tee 将 stdout 输出发送到终端和文件的脚本后,shell 提示似乎不会重新出现