2007年8月30日木曜日

bashとsedで複数ファイルのテキストを置換する方法

複数ファイルにまたがって同じテキスト置換を行う方法。
例えばディレクトリ内のHTMLファイル全てに対して置換を行いたい場合1個1個ファイルを開いて編集するのは面倒なので、一発で行いたい。


find . -name "*.html" -exec sed -i 's/元テキスト/置換後テキスト/' {} \;

何をしているのか細かく説明すると

find . -name "*.html" -exec
このディレクトリ(.)の中にある名前が*.htmlにマッチするファイルに対して

sed -i 's/元テキスト/置換後テキスト/' {} \;
上書き保存で(-i) 元テキストを置換後テキストに変更する

となる。
ちなみに {} はfindの結果で得た(この場合はhtmlファイルのファイル名)が入るようになっている。

2007年8月27日月曜日

Imagemagickでディレクトリの中の画像を一括縮小する

ホームページなどで写真を公開している場合など、デジカメで撮ったたくさんの写真を一括で縮小(あるいは拡大)したい場合がある。
imagemagickを使えばとっても簡単にできる。

例えば images ディレクトリの画像を全て 500x375にリサイズしたかったら:

$ cd images
$ mogrify -resize 500x375! *.jpg

他にもimagemagickは色々なことがたくさんできる。ここあたりが詳しいかな。

2007年8月26日日曜日

生年月日から年齢を計算する

佐野裕のサーバー管理者日記さんより:

生年月日から年齢を計算する方法

(今日の日付-誕生日)/10000の小数点以下切捨て。

pythonの例が無かったので書いときますw

print int ((20070823 - 19850101)/10000)



2007年8月25日土曜日

tarとsshでバックアップを取る方法

いつもやりかたを忘れるので覚え書き。



  1. ローカルのディレクトリをssh経由でリモートサーバーにバックアップする方法:
    $ tar zcvf - [バックアップするディレクトリ(例:/home)] |ssh [バックアップ先のサーバー] "cat > [ファイル名(例:home.tgz)]

  2. リモートのディレクトリをssh経由でローカルにバックアップする方法:
    $ ssh [バックアップするディレクトリのサーバー] "tar zcvf - [バックアップするディレクトリ(例:/home)]"|cat > [ファイル名(例:home.tgz)]

テキストを製本できるように印刷してみる

前回、postscriptファイルを色々いじって、りなざうで読んでいたのだが、どうにもやっぱり紙に印刷してじっくり読むのが性にあってるようだ。結局印刷することになった。

せっかく印刷するので本(とういか小冊子)にしてしまおうと思ったが初めてにしては意外とうまくいったので今後のためにメモ。

使用するツールはpsbookとpsnupで、両方ともpsutilsに入っている。

# emerge app-text/psutils

まず、psutilsがまともにa4に変換してくれないっぽかったので、gsで各ページをa4に変換する。
Firefoxでpsに"印刷"したページなどは以下の操作をしないとマージンなどがおかしくなって、行頭数文字が切れるなどの現象が起きた。

$ gs -dBATCH -dNOPAUSE -q -sDEVICE=pswrite -sPAPERSIZE=a4 -sOutputFile=a4.ps input.ps

次にpsbookで本に適した形になるようにページをシャッフルする。

$ psbook a4.ps book.ps

そしてpsnupで用紙1枚あたり、2ページ印刷する。

$ psnup -la4 -2 book.ps >2up.ps

最後にこれを両面印刷すればOK。

$ lp -o Duplex=DuplexTumble -o PageSize=A4 2up.ps

注意したいのは両面印刷を指定するDuplexオプション。うちのプリンタではDuplexNoTumbleだと印刷が表と裏で上下逆になってしまった。あとは印刷された結果を半分に折って、ホッチキスでとめるか、気合いを入れて製本すれば出来上がり!

複数のpostscriptファイル(PDFも可)を一枚にまとめる方法

Web上でたまにダウンロード可能な書籍を発見することがある。大抵はちょっと古目の本だったりするんだけど、公開している著者に感謝しつつも、「なんで章ごとに別ファイル?」とたまにぷちっとなることがある。

そこで、複数のps(ポストスクリプト)ファイルをひとつにまとめあげる方法。下の例ではchap1.ps と chap2.ps を out.ps として結合して吐き出す。


$ gs -dBATCH -dNOPAUSE -q -sDEVICE=pswrite -sPAPERSIZE=a4 -dNOPLATFONTS -sOutputFile=out.ps chap1.ps chap2.ps


chap2以下を延々連ねれば、いくらでも連結できる。Ghostscriptつえー。

ちなみに -sDEVICE=pdfwriteでやるとPDFファイルに出力できる。つえー。

esd 経由で別のPCで音楽を聞いて見る

うちにはGentoo機が一台リビングのテレビにつながっていて、キャプチャーしたテレビ番組とかをみれるようにしてある。リビングなのでキーボー ドとかマウスとか無しで、操作はssh経由でやっているのだが、mp3などを聞くのにいちいちssh経由でmpg123などを起動するのが若干面倒。

そこで、別の部屋にあるメイン機(クライアント)から直接リビング機(サーバー)に音が出力できると多少楽になると思い、色々探した結果、簡単にesd ( Enligtenment Sound Daemon ) を使って出来ることを発見したのでメモしておく。

サーバー側:

esdを提供しているebuildはesound、さらにはesdというUSE FLAGもあるので設定しておく。

# emerge esound
次に/etc/esd/esd.confを編集する

-spawn_options=-terminate -nobeeps -as 2

+spawn_options=-d default -nobeeps -as 2 -tcp

-terminate があるとクライアントが終了するとesdごと終了するのを防ぐため。

-tcp をつけるのはtcp経由でリモートから演奏できるようにするため。

-d はalsaのデフォルトのデバイスを指定している。

デーモンの起動

# /etc/init.d/esound start

クライアント側:

次 にクライアント側から音楽でもならしてみる。esdのUSE FLAG を設定していれば、mpg123や、beep-media-player、xmmsでも大丈夫なはず。 esdをリモートに飛ばす設定はクライアントPCの音声全てをリモートに飛ばす方法と、環境変数を使ってアプリ単位で飛ばす方法がある。今回は普段はロー カルのesdに音声を出力、サーバーでたまに音楽を聞きたいだけなので、環境変数でやってみる。

$ ESPEAKER=server.ip mpg123-esd hoge.mp3

ESPEAKER環境変数をサーバーのIP:ポート(デフォルト16001)にしてあげて、 mpg123のesd版である、mpg123-esdをつかって何かを再生してみると…

で き た ! !

ちょっとは便利になったかな?

ちなみにサーバー側にusbのリモコンを繋げてごにょごにょと思って、ハード自体は購入ずみなんだけど、まだ試していない。やる機会があれば、レポートします。

LinuxでP901i用iモーション(偽着メロ)を作る

チョット前に携帯をP901iに買い替えたので、自分で手持ちのmp3から着信音を作ってみようと思い、色々調べてみた。

ようは、mp3->3gpに変換できればいいわけだけど、以外と情報が無かったので、一応書いておく。

Windowsでは色々ソフトがあるみたいだけど、Linuxのみでできるか挑戦。結果は「なんとなく」できた。「なんとなく」というのは、P901iで再生は出来たけど、なぜか着信音として設定できなかったので、「なんとなく」。

手順はこんな感じ

  1. 適当なmp3を用意する。(たぶんwavとかでもだいじょうぶ)
  2. ここ から自分の携帯にあったビットレートとかを探す。
  3. ffmpegで変換する。
  4. どっかにupして、携帯からダウンロードする。

ffmpegのコマンドラインはこんな感じ

$ ffmpeg -y -t 30 -i hage.mp3 -bitexact -vn -acodec aac -ac 2 -ar 16000 -ab 40 -f 3gp hage.3gp

-t 30 はあたまから30秒だけ使うの意。←もしかしたらこのあたりで着信音設定ができないのかもしない。ファイルでかいのかな?

ほかになにか必要なのかな?解かる人は教えてください!

Postgresql データベースのバックアップとリストアの覚書

Portageのpostgresqlのバージョンが上がっていたので、一度dbをダンプし、アップグレードをして、新しいバージョンにリストアしてみた。

具体的には

まずデータのバックアップを取る。

# pg_dumpall > db.dump
# rm /var/lib/postgresql/data

postgresをアップグレードする。

# emerge -U postgresql

新たにデータベースを作る。

# mkdir -p /var/lib/postgresql/data
# chown postgres /var/lib/postgresql/data
# su postgres
# /usr/bin/initdb -D /var/lib/postgresql/data
# exit

postgresを起動して、データをリストアする。

# /etc/init.d/postgresql start
# psql -U postgres -f db.dump template1

これで復旧完了!

Mplayerのコンソール出力を英語に戻す方法

Mplayerを使って色々な自動化スクリプトを作ってみようと思ったら、コンソールへの吐き出しが日本語になっていた。 grepとかで処理をする場合日本語を使ったりすると汎用性にかけてしまうので、英語で吐いてもらいたい。

LANG=CとかLC_ALL=Cとかしても日本語のままだし、ぐぐっても何もでてこない。

答えはportageにあった。環境変数LINGUAS。うちはkde-18n用にmake.confの中に

LINGUAS="ja"

と入っている。mplayerのebuildも同環境変数を参照するため、mplayerを日本語化してくれていたのだ。

# LINGUAS="en" emerge mplayer

英語に戻った。ヨカッタ

wma を mp3に変換する

何故かWindows Media Player でエンコードしたファイルがあったのでmp3に変換。

$ mplayer hoge.wma -ao pcm -aofile hage.wav
$ lame hage.wav hage.mp3

で出来る。ワンパスで出来ないのかなー…とりあえず、mplayer最強。

追記 :2008年6月16日
コメントを下さったcola-zeroさんがこちらでMac (leopard)の手順を紹介していますよ。

Linux Tips移行中

訳あってブログを新設。
japanvik.netからLinuxのTips関係をこちらに移行します。
そして今後新しいネタはこっちに書いていきます。