接続のために引用されたFLACファイル名のソートされたリストをSoXに渡す必要がありますが、期待どおりにソートするのに問題があります。
私が使用している場合:
find . -maxdepth 1 -type f -iname "*.flac" | sort
私が得たのは、まさに私が期待したものです。
./01-Lordy.flac
./02-Both Sides Now.flac
./03-Solitary Man.flac
./04-Holly Holy.flac
./05-Cherry Cherry.flac
./06-Kentucky Woman.flac
./07-Sweet Caroline.flac
./08-Thank the Lord for the Nightime.flac
./09-And the Singer Sings His Song.flac
./10-Brother Loves Traveling Salvation Show.flac
しかし、私は改行なしで引用されたリストが必要なので、私がやっていることにそれを実際に使用することはできません。 -printfが私のためにこれを行うことができることを知っていますが、試してみると次のようになります。
find . -maxdepth 1 -type f -iname "*.FlAc" -printf "\"%p\" " | sort
引用符で囲まれ、スペースで区切られたファイル名のリストが表示されますが(良い!)、ソートされません(悪い!)。または、少なくとも私が期待どおりに並べられていません。
"./08-Thank the Lord for the Nightime.flac" "./03-Solitary Man.flac" "./09-And the Singer Sings His Song.flac" "./05-Cherry Cherry.flac" "./06-Kentucky Woman.flac" "./10-Brother Loves Traveling Salvation Show.flac" "./07-Sweet Caroline.flac" "./02-Both Sides Now.flac" "./01-Lordy.flac" "./04-Holly Holy.flac"
おそらくもっと見知らぬのは、同じコードを使用しますが、テストのために改行を追加する場合です。
find . -maxdepth 1 -type f -iname "*.FlAc" -printf "\"%p\" "\\n | sort
出力がもはや必要ではなくても、ソートは引き続き機能します。
"./01-Lordy.flac"
"./02-Both Sides Now.flac"
"./03-Solitary Man.flac"
"./04-Holly Holy.flac"
"./05-Cherry Cherry.flac"
"./06-Kentucky Woman.flac"
"./07-Sweet Caroline.flac"
"./08-Thank the Lord for the Nightime.flac"
"./09-And the Singer Sings His Song.flac"
"./10-Brother Loves Traveling Salvation Show.flac"
これはUbuntu 18.04.1にあります。
答え1
sox
ファイルがすべて同じディレクトリにあり、並べ替えられたファイル名のリストを bash シェルに渡すには、次のように直接実行できます。
shopt -s nocaseglob
sox *.flac
シェルnocaseglob
オプションを使用すると、foo.FLAC、foo.Flac、foo.flaCなどのワイルドカードを選択できます。ワイルドカードは、nakedのようにアルファベット順にソートされたリストに展開されますsort
。たとえば。9-file.flac
で始まるファイル名の後に配置されます8
。
上記のbash-ismをすべてのシェルで動作するワイルドカードで簡素化した@mosvyに感謝します。
sox *.[Ff][Ll][Aa][Cc]
角かっこを使用すると、「flac」拡張子を大文字と小文字の組み合わせで実行しているfind ... -iname "*.FlAc"
操作と一致させることができます。