それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

csh 系で 日本語 文字コードを設定する

csh 系のシェルを使ってた

FreeBSDにログインする機会があり、文字コードで詰まった。

文字コード環境変数をセットするには setenv を使うらしい。

 setenv LANG ja_JP.UTF-8

これで日本語が正しくなった。

pv pipe viewer をcaptureする

プロセスの進捗を見る pv で

pv はプロセスパイプを通過したバイト数をみて、進捗を見ることが出来るのですが。

pv の出力をスクリプトから取りたい

pv の output は stderr に書かれるのだけれど、それをキャプチャリングしたいなと思ったら。。。結構面倒くさいのです。

pv は プロセスの起動をアレコレしているっぽくて、ターミナルのFdに直接書いてるわけではなさそうなのです. たぶん tty とかに直接かいてるんじゃないかな。

-f オプションを使う。

オプションを使うことでstderr に書き出す事ができる。

pf -f hdd.img | lzop ...  2> out.log

ruby とかで spawn / fork するには

r,w= IO.pipe
cmd = 'pv -f  IMG_3200.MOV | cat - > /dev/null'
puts cmd
pid =  Process.fork do
  r.close
  STDERR.reopen w
  Process.exec cmd
end
s = ''
w.close
while s = r.read(100) do
  puts s
end

Process.waitpid pid

こうすれば、進捗を変数に取り出すことが出来た。あーこれはハマるわ。。。 ffmpeg の進捗をもっと簡単に取る方法ないのかな。。。。

関連資料

http://takuya-1st.hatenablog.jp/entry/2017/03/06/172644

参考資料

http://www.ivarch.com/programs/quickref/pv.shtml

WindowsのSJISのファイルがUTF-8で化けるので一気に置換するスクリプト

windowsから来たZipファイルを展開したら

文字コードがグチャグチャーって化けるのでした。辛い。

文字コードを修正するスクリプトをぱぱっと書いた

conv_file_name.sh -v -n path/to/*.pdf
conv_file_name.sh -v  path/to/*.pdf

nkf があれば何とか出来るんだけけれど結構面倒くさいのでファイル名を変化するシェルコマンド書いた。

あれこれ冗長なのと細かいエラー処理をしてないのであらゆる場面に対応できるかと言われれば多分出来ないけど。

とりあえず、これでいいや

conv_file_name.sh

#!/usr/bin/env bash

function mv_conv(){
  src=$1
  dst="$( echo -n $src | nkf -w )"

  if [[ "$src" == "$dst" ]] ; then
    return
  fi
  if [[ $3 == 1 ]] ; then
    echo "'$src'" "'$dst'"
  fi
  if [[ $2 != 1 ]] ; then
    mv  "$src" "$dst"
  fi
}

declare FILES;
declare VERBOSE;
declare DRY_RUN;

for arg  ; do
  case $arg in
    '-n')
      DRY_RUN=1
      ;;
    '-v')
      VERBOSE=1
      ;;
    *)
      FILES+=("$arg")
  esac
done

for i in "${!FILES[@]}"; do
  file=${FILES[$i]}
  mv_conv "$file" "$DRY_RUN" "$VERBOSE"
done