最近全然アニメを見ていないということもあり、foltiaさんをかなりほったらかしにしておりましたところ、どうやら結構な期間B-CASカードが読み込めない状態になってしまったようで、スクランブル解除が失敗しているファイルが大量に。
またコマンドベシベシ叩いてやらんといかんなぁと思っていたのですが、一つ一つコマンドを叩いていたところ、2つほど元ネタのファイルを誤って削除するということをしてしまったため、スクリプトを作成してファイル名を指定すればOKってを作ってみることに。
が、いろいろLinuxはいぢっているものの、シェルスクリプトを自前で作成したことがなかったので、やや苦戦してしまったので、メモ残しがてらやったことをメモメモ。
まずはスクリプトを準備ってことで、特に条件式とかは用意せず、第1引数にスクランブル解除したいファイル名を設定するだけの至ってシンプルなものを準備。
以下、Linuxが得意な人は何アホなことをやっているんだって話かと思いますが、Linuxのスクリプト童貞の戯れ言と思っていただければ幸い。
まずはスクリプトファイルを作成しまして、実行するにはアクセス権が必要ってことなので、アクセス権を付与。
場所は、どこでも使えるようにしたら便利かもですが、まぁこのディレクトリでしか使わないから同じ所に置いちゃえってことで。
スクリプトの中身は至ってシンプル。
スクリプトの中の $1 は、第1引数って意味ですよ。
で、これをfoltiaのtsファイルが入っているところに作成しまして、レッツ実行!と思ったら・・・
うーん、うまく動いてくれない。
試しにHelloWolrd的なスクリプトを動かしてみてもダメなので、どうやらこのディレクトリに直接置いてもダメみたいなので、Homeディレクトリに置いてどこでも実行できるようにしていることに。
試しに動かしてみる。
引数が正しくないのでエラーだらけですが、動いてはいる様子。
大丈夫そうなので、Homeディレクトリの配下に作成したscriptディレクトリを環境変数に突っ込む。
次に使いたいディレクトリで実行してみることに。
うむうむ、いい感じ。
では、レッツトライ。
おおぅ、バッチリではありませぬか。
引数の数に応じて連続で動くようにしてやるとまた更に素敵になりそうな予感ではありますが、とりあえずこれでことは足りそうなので良しとしますか。
ちなみにキーワード予約するとハイフンから始まるファイル名になるのですが、ファイル名をそのまま入れちゃうとパラメータだと勘違いれましてコマンドが上手く動かないので、こんな感じでファイル名の頭に「./」(今自分がいるディレクトリだよ)ってのを入れてあげると幸せになります。
しかしながら、これが本当に正しいやり方なのだろうか・・・うーん。
本記事を参考にスクリプトファイルを作って実行するまではうまくいったのですが、デコード失敗ファイル名が「-」で始まっているためエラーが起きています。./つけてもerror – failed to open・・・と出てうまくいきませんが、これはスクリプトで先頭を削ってから処理をすればよいのでしょうか。
このスクリプトを定期的にフォルダ内の全データに対して行うスクリプトを作っておいたほうがよさそうですね。結構デコード失敗してます。
先頭に「-」対策で、最後に記載させていただいておりますとおり、./を付与して回避できましたので、別の方法を取るとしたらスクリプト内で、引数に対して必ず頭に./とつけてやるぐらいでしょうか・・・
私はデコード失敗は殆ど無いのでこれで事足りておりますが、以前コメント頂いた方はデコードエラーをチェックしてから該当ファイルのみ処理をかけるという方法を取っていらっしゃるようです。自分のケースではこれで事足りておりましたのでやってみてはないのであまりお役には立てませんが・・・・
記事を参考にフォルダ内のファイルをb25するバッチを作りました
#1/bin/sh
for file in
\find . -maxdepth 1 -name '*.m2t'
; doecho $file
b25 ./$file redesctemp.m2t
mv ./$file ./$file.old
mv redesctemp.m2t ./$file
rm ./$file.old
done
うまくいくときは良いのですが、少しの衝撃や録画開始?等のタイミングでBCASが読めずb25が失敗するとどうもそのファイルをデコードせず削除してしまうようです。
HDDの大半を失いましたが、これしないとほとんどのm2tがCAP作成不可・mp4変換不可になります。
何とかして「b25に失敗したら何もせず次に行く」処理を追加できないでしょうか。
一人でBASHについて調べても限界があり有識者のお知恵を拝借したく存じます。
当方あまりBASHについて詳しくないのでなんともですが、多分直接b25の処理が失敗したことを判定して分岐するのは出来ないかと。
代わりに、デコードが失敗する = ファイルサイズ極端に小さくなるという状態になると思いますので、例えば、b25処理が終了した後ファイルサイズが元のファイルより極端に小さい場合はファイル削除処理を飛ばすように分岐してみるのはいかがでしょうか?
またお役に立てず面目ないです。