#はじめに
ファイル操作はほとんどgit grep
で行っており、基本的な事をおざなりにしてしまっていたので、
もう一度復習しようと思い調べることにした。
##find
findはその名の通りディレクトリーツリーからファイルを探す方法である。
基本形は下記である。
$ find (検索開始ディレクトリ)(検索条件)(アクション)
##検索条件
###-name
$ find . -name file-1.txt -print
./file-1.txt
その名の通り名前で検索。ただし、ワイルドカード(*?)を使う場合、Bashの変数展開で読み込まれてしまうので必ずシングルクォートまたはダブルクォートをもちいること。
※検索条件(-name)には(-iname)というものもあるが、こちらは(-name)と違って大文字小文字を区別しない。
###-type
$ find . -type d -print
検索条件の(-type)もその名の通りタイプ名で検索します。
-type d
のd
はファイル種別で、上記だと現在の位置からデレクトリだけを探す
という命令になります。
なお下記のように組み合わせて使うことも可能です。(-aはAND検索で、省略可能。)
$ find . -type f -a -name '*.txt' -print
####検索できるファイル種別
指定 | ファイル種別 |
---|---|
-type f | 通常ファイル |
-type d | ディレクトリ |
-type l | シンボリックリンク |
###アクション | |
現在すべて-print で表示させてますが、-ls で表示すると「ls」形式で表示されます |
find . -type f -a -name '*.txt' -ls
671143 0 -rw-rw-r-- 1 vagrant vagrant 0 Apr 19 04:29 ./find/file-1.txt
671215 0 -rw-rw-r-- 1 vagrant vagrant 0 Apr 19 04:29 ./find/file-3.txt
671213 0 -rw-rw-r-- 1 vagrant vagrant 0 Apr 19 04:29 ./find/file-2.txt
##locate
locateはfindとは違ってファイルパスが格納されているDBから検索されるため、findに比べて高速に検索することが出来ます。
###インストール
Linuxに最初から入っている訳ではないので、インストールしなければなりません。
####すでにあるかの確認
$ locate --version
入ってないのであればインストールしましょう。
#####CentOSでインストール
$ sudo yum install mlocate
#####Ubuntuでインストール
$ sudo apt-get install mlocate
###データベースの作成
$ updatedb
上記、updatedb
コマンドでデータベースが作成され、一定期間ごとにデータベースが更新されるようになります。
######注意点
データベースの更新は、インストール時に一日一回のペースで更新されるように設定されています。ですので、今作ったファイルが検索に引っかかるようになるのは1日後です。また、今消したファイルも1日後までは検索に引っかかってしまいます。
locateは作成(削除)してからしばらく経った後のファイルを見つけるのに向いてるといえます。
##locateで検索
$ locate bash
これでbashと名の付くファイルがすべて高速に表示されます。
####検索できるファイル種別
オプション | 効果 |
---|---|
-i | 大文字小文字を無視する |
-b | ファイル名のみ検索(ディレクトリは無視) |
-A | and検索(通常はor検索) |
###参考文献 | |
新しいLinuxの教科書 |