Tips

sedのTips

findsedを組み合わせたテキストファイルの置換Tips。

for f in `fgrep -Rl "http://www.amazon.co.jp/" entries/diary/*`;
do
  sed -i -e 's#http://www.amazon#https://www.amazon#g' $f;
done

昨年常時SSL化を行ったが、相変わらずChromeから「承認されていないソースからのスクリプトを読み込もうとしています」と叱られていたので、Amazonのスクリプトもhttpsで参照するように対処。

一度、一時ファイルに書き出してから元のファイル名で上書きする必要があると思って悩んでいたのだが、sedのinplaceオプションで済むことがわかって、ラッキー。

参照

Qiita https://qiita.com/

TIPSと罠

その1。Linuxでプロセス毎のメモリ消費量を調べたい時のコマンド。

pmap -x ps ax | grep "プロセス名" | awk '{print $1}' | tail -1

いつも忘れて調べるのに小一時間かかるので、メモっておく。

その2。mysqldumpでバックアップする際に更新が滞る事が多々あったのだが、mysqldumpの既定でテーブルロックがかかっていた事が判明。「–optが–lock-tablesを有効にする」のは理解していたが、「–optオプションがデフォルトで有効」というのを正しく理解できていなかった。デフォルトで「有効なオプション」ってそもそもオプションと言えないのでは!?

参照

Qiita http://qiita.com/

findのTips

findxargstarを組み合わせた backup Tips。

#!/bin/bash
TSTAMP=`date +%Y%m%d_%H%M%S`;
find $1 \( -name \*.[ch] -o -name \*.mak -o -name \*.txt -o -name \*.ini \) -print0 \
  | xargs -0 tar jcvf $1_${TSTAMP}.tar.bz2;

ポイントは

find コマンドの -print0 オプションと、xargs コマンドの -0 オプションを組み合わせると、検索条件に一致したファイル(ディレクトリ)名にスペース・引用符・バックスラッシュなどが含まれていても適切に処理することができる。

だそうだが、kernel tree等で数千のファイルが対象となるような場合はそもそもxargsでも一発では無理なので、最後のxargsセッションしかtarされない問題があるので、以下のようにxargsではなく-Tオプションでファイルリストを標準入力から渡すのが正解。

#!/bin/bash
TSTAMP=`date +%Y%m%d_%H%M%S`;
find $1 \( -name \*.[ch] -o -name \*.mak -o -name \*.txt -o -name \*.ini \) -print0 \
  | tar jcvf $1_${TSTAMP}.tar.bz2 -T -;

また、7日以内に更新したファイルを固めたい場合は

#!/bin/bash
TSTAMP=`date +%Y%m%d_%H%M%S`;
find $1 -mtime -7 -print0 \
  | tar jcvf $1_${TSTAMP}.tar.bz2 -T -;

となる。