2014年11月10日月曜日

[Linux] find -exec で複数行コマンド/ユーザー定義関数を実行する

find -exec で複数行コマンド/ユーザー定義関数を実行するためのメモ
※bashのみ対象

find -execはシェルを実行せずに直接コマンドを実行しているため、シェルで定義したものは使えないらしい。
 ・UNIX/Linux の find -exec の引数にはシェルの構文を使えない.
 http://ameblo.jp/noocyte/entry-10024398713.html

そこで以下の流れで実行することにする

□複数行コマンド
(1) exec内でシェルを実行
サンプル:カレント以下のファイル名と中身をtailする
bashのシンボリックリンクであるshで実行すると、~.bashrcを読み込まない
$ find . -type f -exec sh -c "echo; echo {}; tail -3 {}" \;
$ find . -type f -exec bash -c "echo; echo {}; tail -3 {}" \;

□ユーザー定義関数
(1) 関数を定義しexportする
$ function test1() {
>     echo; echo $1; tail -3 $1;
> }
$ export -f test1

(2) exec内でシェルを実行
$ find . -type f -exec sh -c "test1 {}" \;

(3) 不要なら削除
$ unset test1

0 件のコメント:

コメントを投稿