0

find コマンド 纏め

■find コマンドを纏めました。

find – ディレクトリ階層下のファイル、ディレクトリを検索する。

書式

$ find ディレクトリ 検索条件 アクション

検索対象となるディレクトリ、検索条件、アクションの順に
コマンドライン引数で

⇢ ディレクトリを省略すると、

カレントディレクトリが対象になる。

⇢ 検索条件を省略すると、

すべてのファイル・ディレクトリがマッチするようになる。
検索はファイルだけでなくディレクトリも対象である。

⇢ アクションを省略すると、

-lsアクションの扱いになり、
単純に見つかったファイル・ディレクトリのパスが改行区切りで出力される。

⇢ 従って、引数なしで find とすると、

カレントディレクトリに含まれるすべてのファイル・ディレクトリを、
ディレクトリを再帰的にたどりながら表示してくれる。

ファイル名などでのソートはしてくれないので、必要であればパイプでsortコマンドをつなぐ必要がある。

アクションは単に検索結果を表示するだけの-lsのほかに、他のコマンドを実行する-execなどがある。

検索式 説明
-name ファイル名 ファイル名で検索
-atime 日数 最終アクセス日で検索
-mtime 日数 最終更新日で検索
-perm アクセス権で検索
-size ファイルサイズで検索
-type ファイルの種類 ファイルの種類で検索 d ディレクトリ、f ファイル、l シンボリック
-user ユーザ名 ファイルの所有者で検索
-maxdepth 階層 指定した階層まで検索
-mindepth 階層 指定した階層から下を検索
アクション 説明
-print 検索結果を改行で区切って表示(省略可)
-print0 検索結果をNULL文字(\0)で区切って表示
-exec コマンド名 コマンドを実行する。
例:$ find . -type f -exec perl -p -i -e ‘s///g’ {} \;

-mtimeについて

何日か前に編集したファイルのファイル名がわからない時に有効

-mtime N  : 最終更新日がちょうどN日前
-mtime +N : 最終更新日がN以上前
-mtime -N : 最終更新日がN日以内

-maxdepth、-mindepthについて

わかりにくいので、
下記結果を参考にしてください。

要は、

-maxdepth N は N階層まで検索
-mindepth N は N階層以降を検索

んー同じ説明になってしまう・・・

絵で描くと・・・
IMG_8129

んー ;

注意

-maxdepth、-mindepth と-type オプションを併用する際の書き方の順番は
①階層指定
②ファイルタイプ指定
としないと怒られました。
 ↓

$ find /var/www/html/wordpress/wp-content/themes/enlightenment -type f -mindepth 7 | grep -E ".*php$"
find: warning: you have specified the -mindepth option after a non-option argument -type, but options are not positional (-mindepth affects tests specified before it as well as those specified after it).  Please specify options before other arguments.

上記を踏まえ、下記ディレクトリ構成の元、確認しましょう。

$ tree
.
└── dir1
    └── dir2
        └── dir3
●第1階層まで検索
$ find . -maxdepth 1 -type d
./dir1

●第2階層まで検索
$ find . -maxdepth 2 -type d
./dir1
./dir1/dir2

●第3階層まで検索
$ find . -maxdepth 3 -type d
./dir1
./dir1/dir2
./dir1/dir2/dir3

●第1階層以降を検索
$ find . -mindepth 1 -type d
./dir1
./dir1/dir2
./dir1/dir2/dir3

●第2階層以降を検索
$ find . -mindepth 2 -type d
./dir1/dir2
./dir1/dir2/dir3

●第3階層以降を検索
$ find . -mindepth 3 -type d
./dir1/dir2/dir3

-atimeついて

この記事を書いてる日

# date
3月 19日 土曜日 17:40:04 JST

testファイル情報

# stat test
  File: `test'
  Size: 0               Blocks: 0          IO Block: 4096   通常の空ファイル
Device: fc03h/64515d    Inode: 5986        Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-03-16 18:18:00.000000000 +0900 ←最終アクセスは3日前
Modify: 2016-03-16 18:18:00.000000000 +0900
Change: 2016-03-19 16:43:27.445188442 +0900

# 最終アクセス:1日以内 で検索

# find test -atime -1 -name test
ナシ

# 最終アクセス:2日以内 で検索

# find ./ -atime -2 -name test
ナシ

# 最終アクセス:3日以内 で検索

# find ./-atime -3 -name test
test

ちなみに、
findコマンドの検索条件はデフォルトでAND条件となり、全ての条件にマッチするファイルを検索する。
OR条件で検索したい場合、-o または -or で連結して指定する。

OR検索:3日以内に更新されたファイル

find . -type f -o -mtime -3

以上です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です