2017-06-30 10 views
1

Linux Mintを使用してSFTPサーバを実行している私のために、ビデオをたくさんコンパイルするLinuxマシンにbashスクリプトがあります。私はCygWin(Windows 10のbashより優れている)を使用してより高速にエンコードできるWindows 10 PCを持っていて、SFTPドライブをプログラムで検出できます。私はスクリプトを実行し、エンコードしたいビデオファイルはLinux PC上で動作していても存在しないと述べています。この行をスクリプトに追加し、CygWinのルートディレクトリを変更します。Linux PCが検出したファイルをCygwinが検出しない

rootdir='/cygdrive/x' 
if [ ! -d "$rootdir" ];then rootdir='';fi 

Linux上でしばらくバッシュ私はエンコードしたいファイル名は、それらにスペースを持っている、と私は、彼らが位置し、lsを実行しているディレクトリに移動したときに、私は気づく、Cygwinは、単一引用符を追加し、ファイル名をエスケープミントはそれをしません。私がしたいことは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上の細かい動作しますが、それは、LSにありますにもかかわらず、入力ファイルが見つからない状態になるCygWinのffmpegの中で実行されているが、脱出したとき。

+1

Cygwinのlsは引用符で印刷しているかもしれませんが、人間の利益のためです。とにかくその 'ls'出力を解析するべきではありません。あなたのコードを表示して、何をしようとしているのかについてもっと詳しく知っていれば、助けてくれるかもしれません。 (http://mywiki.wooledge.org/ParsingLsを参照) –

+0

@EricRenoufサンプルコードを追加しました。 –

+0

@EricRenouf Cygwinの 'ls'はデフォルトでそれをしません。彼の投稿には' ls'の出力を解析していることは示唆されていません。ファイル名の中に余分な一重引用符が含まれている可能性があります。元のポスターは、WindowsエクスプローラやWindowsのコマンドプロンプトから 'dir'コマンドを使用して、これらのファイルに実際にどのような名前があるか調べることができます。 –

答えて

0

コードが簡略化されている可能性があります。現在のところ、暗黙的なカレントディレクトリを使用することができ、それはすべて相対パスです。 (あなたがそれを使用していないので、私はまた、$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")" 

(構文強調表示は、その上で台無しにすることを気にしないと、シェルは$(…)コマンド置換の内部引用符は、引用符と異なることを理解していますそれ以外の場合は、深く巣を入れることができます)

+0

実際のコードと同じように、変数はスクリプトとは別のディレクトリに配置されているので、変数を例として使用した。 rootdirはcygwinの内部からリモートマシンのルートを特定するためにもそこにいました。 –

+0

それは意味があり、予想された。'' $(cygpath -w "$ blah") "'はあなたのために働いていますか? –

関連する問題