2017-10-09 12 views
1

ディレクトリに.aiff形式のファイルが複数あり、SoXを使って.wavに変換したいと思います。私は.soiffをSoXの.wavに変換する

for i in `/Users/me/RainbowAiff/ *.aiff`; do echo -e "$i"; sox $i $i.wav; echo -e "$i.wav"; done; 

を次のようにある

theFiles = `/Users/me/RainbowAiff/*.aiff`; 
for eachFile in $theFiles; do v1=${eachFile%*.aiff}; 
oldFile="$v1.aiff"; newFile = "$v1.wav"; 
echo oldFile $oldFile; echo newFile $newFile; sox $oldFile $newFile; done 

thisウェブサイトは、以下の通りである。thisウェブサイト、上のコードを試してみましたが、私は「バイナリを実行することはできませんと言う両方のインスタンスでのエラーメッセージが表示されます。ファイル"。このエラーの原因は何ですか?

答えて

1

互換性のないバイナリファイルは、このエラーの原因となるsee this questionです。

file soxuname -aコマンドの出力が、バイナリファイルとオペレーティングシステム(x86とARM)との間に相違がある場合は、SoXの正しいバイナリを見つける必要があります。 2015年以降にSoXリリースはありませんが、ご使用のシステムと互換性のあるバージョンを見つけるにはthisthisをチェックしてください。

この問題は、soxのファイル属性にも関係しています。実行可能な属性を与えるには、単にsoxがあるフォルダに行き、chmod +x soxコマンドを実行します(最初にrootアクセスが必要です)。

+1

'ファイルsox'の出力は'マッハ-O、64ビット実行可能x86_64'との出力であります'uname -a'は' 14.5.0です。Darwin Kernelバージョン14.5.0:Tue Apr 11 16:12:42 PDT 2017; root:xnu-2782.50.9.2.3〜1/RELEASE_X86_64 x86_64'これらは互換性がありませんか? (私はバイナリファイルに慣れていません)。ご協力ありがとうございました。 – Lisa

+1

私はMacユーザーではありませんが、残念ながら私はそれに精通していません。彼らはどちらも64ビットと思われる。 'su'コマンドでrootユーザに切り替えて、soxがあるディレクトリに行き、' chmod + x sox'を実行できますか?そして、 'sudo sox'を使って、root権限でもう一度実行してみてください。また、Macにも同様の問題があるようですので、互換性のある古いバージョンのsoxをインストールしてみてください。https://stackoverflow.com/questions/13499871/sox-sound-exchange-on- mac-ppc-10-4-installation-questions –

+1

これはうまくいきましたが、今は構文エラーが出ます。私はそれが別の質問であるべきだと思います。ありがとうございました! – Lisa

1

あなたがリンクした2つのスニペットは、lsechoを使用して少しわかります。
echo -e実際には、OSX(BSD)echoには-eオプションがないため、構文エラーが発生した可能性があります。 (参照するにはman echoを端末に入力してください)。

私はfindとその-execオプションに基づいて、別の1ライナーを組み立てる自由をとった。何

  • -Eについて見つけることができます:

    • findを:

      find -E . -maxdepth 1 -iregex '.*\.(aif|aiff)' -exec bash -c '$0 "$1" "${1%.*}.wav"' sox {} \; 
      

      それを説明するために、現在の作業ディレクトリに開始:extended regex *

    • .を可能にします。相対パスまたは絶対パスで置き換えることができます

    • -maxdepth 1:最初のディレクトリレイヤーでのみ検索されます。このオプションを削除し
      ...また、フォルダ内のフォルダ内のファイルを見つけるために3で、また、フォルダ内のファイルを見つけるために、2と1を置き換え

    • -iregex(ファイルにダウンすべての方法を見つける。)完全な再帰を可能にします:ユースケースと小文字を区別しません正規表現

    • '.*\.(aif|aiff)'

      :期間(\.)に続いて、任意の長さ(*)で何(.)で始まるもの、および文字列 'AIF' または 'AIFF'(または 'AIF'、「AIFFと一致'、' aiFF '...)((aif|aiff)

    • -exec bash -c:これはbashの内部で実行されるコールです:右辺りにそれが

      • '$0 "$1" "${1%.*}.wav"'少し複雑になります非対話型bashシェルで

      を次のコマンドを実行シェル。 $0program nameに拡張されます。 "$1"は、空白の場合は二重引用符で囲まれた最初の(この場合は唯一の)引数に展開されます。 "${1%.*}.wav"は、末尾の '.wav'にタグを付ける前に、strip away the last period and everything afterを除いて最初の引数にも展開されます。ファイル拡張子を効果的に置き換えます。

    • sox {}:これらはシェル呼び出しに渡される引数です。最初の番号(sox)は、使用したいプログラムであり、コール内では$0と呼ばれます。第二({})が発見され、かなりの一口のシェルコール

    $1などを参照したものは何でもファイルfindであると私は専門家だので、私はきたもので、いくつかのミスがあるかもしれません書かれているが、一般的な概要は堅実でなければならない。

    *これは、特定のOSXで、あまりきれいが、よりポータブルオプションは、次のようになります。

    find . -maxdepth 1 \(-iname "*.aif" -o -iname "*.aiff" \) -exec bash -c '$0 "$1" "${1%.*}.wav"' sox {} \; 
    
  • 関連する問題