2011年8月15日月曜日

bash : ファイルを探す


Software Design 2011年 05月号より。
いつも忘れて分からなくなってしまうのでメモ。

◆locate

# locate ファイル名

locateは高速検索が可能。というのも事前にインデックスを作成しているから。
centosでは、cron(/etc/cron.daily/mlocate.cron) によって、毎日DBが更新されている。
なので、当日に作成されたファイル等は検索出来ない。
また、インデックスを貼っていないディレクトリからは検索出来ない。

◆find

# find 対象ディレクトリ -name ファイル名

検索対象は、ファイル名だけじゃなく、下記のようなものも可能。

ファイル名     -name
ファイルパス名     -path
ファイル日付     -mtime
ファイル所有者     -uid
ファイルサイズ     -size
ファイルタイプ     -type
ファイル権限     -perm
inode番号     -inum
ハードリンク数     -links

条件の組み合わせも可能。

[条件否定]
# find . ! -name foo

[and条件]
# find . -name foo -type d

[or条件]
# find . -name foo -o -type d

---

Tips : find で見つけたファイルをコマンド実行の引数に渡す。

検索したファイル名をtailに渡す(1)
# find . -type f -exec tail {} \;

{} の部分にfindで見つけたファイル名が入る。\;は-execの決まりごと。

検索したファイル名をtailに渡す(2)
# find . -type f | xargs tail

(1)と(2)の違いは、-exec は1ファイルごとにtailが実行されるのに対して、
xargs はまとめてtailの引数に渡される。
※"-n"オプションで渡す数を指定可能。また、"-i"オプションを使えば、-exec同様"{}"で渡す位置を指定可能。

検索したファイル名をtailに渡す(3)
forループを使用して可読性を高める。

for f in `find . -type f`
do
     tail $f
done

Tips : 特定のファイルより更新日時が早いファイルを探す。

# find . -newer ファイル名
---

おしまい。

以下、一応リンク。
第一特集:「Vim&Emacsをちゃんと使えてますか?」を参考にさせて頂きました。



0 件のコメント:

コメントを投稿