GNUの並列に連結し、ディレクトリとファイル名

ルカシュTracewski:

私は、次のディレクトリ構造を持っています:

dir1/file.ogg
dir2/file.ogg
dir3/file.ogg
     file2.ogg

私はすべて変換したい.oggにファイルを.wavGNUパラレルで。私がこれまでに得たのはここです:

find . -name '*.*' -type f -print0 | parallel -0 ffmpeg -i {} outputdir/{/.}.wav

ここでの問題は、明らかにディレクトリの名前が異なるものの、ファイルが内部に同じ名前を持っていることです。上記のコマンドは、連続して、ディレクトリの内容を上書きします。私が代わりたいことは次のとおりです。

outputdir/dir1_file.ogg
outputdir/dir2_file.ogg
outputdir/dir3_file.ogg
outputdir/dir3_file2.ogg

基本的に、私はサブディレクトリ名を抽出し、ファイルベース名でそれを連結し、私自身の拡張子をつけたいと思います。

何か案は?

フィリップ:

perlの変換を使用して、このコマンドは、必要な効果を実現する必要があります。

find . -name '*.ogg' -type f -print0 | parallel -0 echo ffmpeg -i {} outputdir/{= '$_ =~ s[^\./][]; $_ =~ s[/][_]g; $_ =~ s[ogg$][wav]g;' =}

削除echoffmpegのコマンドを実行します

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=6735&siteId=1