find検索と削除

63453 ワード

 find :

1
2
    /> ls -l     # 
    -rw-r--r--. 1 root root 48217 Nov 12 00:57 install.log
    -rw-r--r--. 1 root root      37 Nov 12 00:56 testfile.dat
    -rw-r--r--. 1 root root 10530 Nov 11 23:08 test.tar.bz2
    -rw-r--r--. 1 root root     183 Nov 11 08:02 users
    -rw-r--r--. 1 root root     279 Nov 11 08:45 users2

1
2
3
4
5
6

ファイル名で検索


-name:検索時にファイル名の大文字と小文字が敏感です.-iname:検索時にファイル名の大文字と小文字に敏感ではありません.このコマンドはfindコマンドで最も一般的なコマンドである、現在のディレクトリから拡張子を検索する.logのファイル.説明する必要があるのは、デフォルトではfindが指定したディレクトリから検索し、サブディレクトリを再帰的に検索します.
/> find . -name "*.log"
 ./install.log
/> find . -iname U*          # find . -name U* 
users users2

1
2
3
4

ファイル時間属性で検索


-atime-n[+n]:ファイルアクセス時間がn日以内[外]のファイルを見つけます.-ctime-n[+n]:ファイルの変更時間がn日以内[外]のファイルを見つけます.-mtime-n[+n]:データの変更時間がn日以内[外]のファイルを見つけます.-amin-n[+n]:ファイルアクセス時間がn分以内[外]のファイルを見つけます.-cmin-n[+n]:ファイル変更時間がn分以内[外]のファイルを見つけます.-mmin-n[+n]:データの変更時間がn分以内[外]のファイルを見つけます.
    /> find -ctime -2        # 2 
    .
    ./users2
    ./install.log
    ./testfile.dat
    ./users
    ./test.tar.bz2
    /> find -ctime +2        # 2 
                          # 2 
    /> touch install.log     # install.log , find 
    /> find . -cmin  -3       # 3 。
    install.log

1
2
3
4
5
6
7
8
9
10
11
12

見つかったファイルに基づいて指定された操作を実行


-exec:一致するファイルに対して、このパラメータによって与えられたshellコマンドを実行します.対応するコマンドの形式は「command」{};注意{}と;間のスペース、同時に2つの{}間にスペース-okがありません:その主な機能と構文フォーマットは-execと完全に同じです.唯一の違いは、shellコマンドを実行するたびにプロンプトが表示されるため、後のshellコマンドが実行されないことです.このオプションは、自動化プロセス全体が停止する可能性があるため、自動化スクリプトには適用されません.
この時点から2日以内に作成されたファイルを見つけ、findの結果に基づいて-execを適用した後のコマンド、すなわちls-lを見つけて、findがファイルを見つけた明らかなリストを直接表示することができます.
    /> find . -ctime -2 -exec ls -l {} \;
    -rw-r--r--. 1 root root      279 Nov 11 08:45 ./users2
    -rw-r--r--. 1 root root  48217 Nov 12 00:57 ./install.log
    -rw-r--r--. 1 root root        37 Nov 12 00:56 ./testfile.dat
    -rw-r--r--. 1 root root      183 Nov 11 08:02 ./users
    -rw-r--r--. 1 root root  10530 Nov 11 23:08 ./test.tar.bz2

1
2
3
4
5
6
ファイル名*が見つかりました.log、同時にファイルデータ修正時間がこの時点から1日以内のファイルです.見つかったら削除します.ある場合、このような書き方は見つかった直後に削除するので、誤って削除する危険があります.

    /> ls
    install.log  testfile.dat  test.tar.bz2  users  users2
    /> find . -name "*.log" -mtime -1 -exec rm -f {} \;
    /> ls
    testfile.dat  test.tar.bz2  users  users2
     , , -ok -exec, :
    />  find . -name "*.dat" -mtime -1 -ok rm -f {} \;
    < rm ... ./testfile.dat > ? y    # , y, *.dat , ls 。
    /> ls
    test.tar.bz2  users  users2

1
2
3
4
5
6
7
8
9
10
11

ファイルが属するownerとgroupで検索


-user:ownerが-userオプションに属する後に指定したユーザーのファイルを検索します.  ! -user:ownerが-userオプションに属していない後に指定したユーザーのファイルを検索します.-group:groupが-groupオプションの後に指定したグループに属するファイルを検索します.  ! -group:groupが-groupオプションに属していない後に指定したグループのファイルを検索します.
    /> ls -l                            # owner root
    -rw-r--r--. 1 root root 10530 Nov 11 23:08 test.tar.bz2
    -rw-r--r--. 1 root root     183 Nov 11 08:02 users
    -rw-r--r--. 1 root root     279 Nov 11 08:45 users2
    /> chown stephen users   # users owner root stephen。
    /> ls -l
    -rw-r--r--. 1 root       root 10530 Nov 11 23:08 test.tar.bz2
    -rw-r--r--. 1 stephen root    183 Nov 11 08:02 users
    -rw-r--r--. 1 root       root     279 Nov 11 08:45 users2
    /> find . -user root          # owner root 
    .
    ./users2
    ./test.tar.bz2
    /> find . ! -user root        # owner root , ! -user 。
    ./users
    /> ls -l                            # root
    -rw-r--r--. 1 root      root 10530 Nov 11 23:08 test.tar.bz2
    -rw-r--r--. 1 stephen root    183 Nov 11 08:02 users
    -rw-r--r--. 1 root      root    279 Nov 11 08:45 users2
    /> chgrp stephen users    # users root stephen
    /> ls -l
    -rw-r--r--. 1 root           root    10530 Nov 11 23:08 test.tar.bz2
    -rw-r--r--. 1 stephen stephen      183 Nov 11 08:02 users
    -rw-r--r--. 1 root            root       279 Nov 11 08:45 users2
    /> find . -group root        # root 
    .
    ./users2
    ./test.tar.bz2
    /> find . ! -group root      # root , ! -user 。    
    ./users

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

指定したディレクトリの深さで検索


-maxdepth:後のパラメータは、現在のディレクトリから指定された深さを表し、1は現在のディレクトリを表し、2は1つのサブディレクトリを表します.このオプションを指定すると、findは指定した深さが見つかっただけでサブディレクトリに再帰されません.次の例の深さは1で、現在のサブディレクトリでのみ検索されることを示します.このオプションが設定されていない場合、findは現在のディレクトリの下にあるすべてのサブディレクトリに戻ります.
    /> mkdir subdir               # , 
    /> cd subdir
    /> touch testfile
    /> cd ..

1
2
3
4
maxdepthの後ろのパラメータは、現在のディレクトリから指定された深さを表し、1は現在のディレクトリを表し、2は1級のサブディレクトリを表し、このようにします.このオプションを指定すると、findは指定した深さが見つかっただけでサブディレクトリに再帰されません.次の例の深さは1で、現在のサブディレクトリでのみ検索されることを示します.このオプションが設定されていない場合、findは現在のディレクトリの下にあるすべてのサブディレクトリに戻ります.
    /> find . -maxdepth 1 -name "*"
    .
    ./users2
    ./subdir
    ./users
    ./test.tar.bz2

1
2
3
4
5
6
検索の深さはサブ1レベルのサブディレクトリです.サブディレクトリの下に作成したtestfileが見つかりました.
    /> find . -maxdepth 2 -name "*"  
    .
    ./users2
    ./subdir
    ./subdir/testfile
    ./users
    ./test.tar.bz2

1
2
3
4
5
6
7

指定したサブディレクトリ検索を除外


-path pathname-prune:指定したサブディレクトリpathname検索を避けます.-path expression-prune:表現で指定したpathname検索のセットを避けます.説明する必要があるのは、-depthオプションを同時に使用すると、-pruneはfindコマンドによって無視されます.
次の例では、避ける必要があるサブディレクトリと避ける必要がないサブディレクトリを作成し、これらのサブディレクトリに検索ルールに合致するファイルを作成します.
    /> mkdir DontSearchPath  
    /> cd DontSearchPath
    /> touch datafile1
    /> cd ..
    /> mkdir DoSearchPath
    /> cd DoSearchPath
    /> touch datafile2
    /> cd ..
    /> touch datafile3

1
2
3
4
5
6
7
8
9
現在のディレクトリでは、DontSearchPathサブディレクトリを避けて、datafile*というファイルをすべて検索します.
    /> find . -path "./DontSearchPath" -prune -o -name "datafile*" -print
    ./DoSearchPath/datafile2
    ./datafile3

1
2
3
現在のディレクトリでは、DontSearchPathとDoSearchPathの2つのサブディレクトリを同時に避け、datafile*というすべてのファイルを検索します.
    /> find . \( -path "./DontSearchPath" -o -path "./DoSearchPath" \) -prune -o -name "datafile*" -print
    ./datafile3

1
2

ファイル権限属性による検索


-perm mode:ファイル権限はmode(modeはファイル権限の8進表現)にぴったりです.-perm+mode:ファイル権限セクションはmodeに合致します.コマンドパラメータが644(-rw-r–r-)の場合、ファイル権限属性に何らかの権限と644が重なる限り、そのようなファイルを選択することができる.-perm-mode:ファイル権限はmodeに完全に合致します.コマンドパラメータが644(-rw-r–r-)の場合、644で指定された権限が現在のファイルに完全に所有されていると同時に、ファイルに追加の権限属性があり、このようなファイルを選択することができる.
    /> ls -l
    -rw-r--r--. 1 root            root           0 Nov 12 10:02 datafile3
    -rw-r--r--. 1 root            root    10530 Nov 11 23:08 test.tar.bz2
    -rw-r--r--. 1 stephen stephen        183 Nov 11 08:02 users
    -rw-r--r--. 1 root            root        279 Nov 11 08:45 users2
    /> find . -perm 644      # 644(-rw-r--r--) 。
    ./users2
    ./datafile3
    ./users
    ./test.tar.bz2
    /> find . -perm 444      # 444( 644)。    
    /> find . -perm -444     #644 444 。
    .
    ./users2
    ./datafile3
    ./users
    ./test.tar.bz2
    /> find . -perm +111    # , 。
    /> chmod u+x users     # users , owner , 。
    /> find . -perm +111    
    .
    ./users    

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

ファイルタイプ別検索


-type:ファイルのタイプを後で指定します.b-ブロックデバイスファイル.d-ディレクトリ.c-文字デバイスファイル.p-パイプファイル.l-シンボルリンクファイル.f-通常ファイル.
    /> mkdir subdir
    /> find . -type d      # , 。
    ./subdir
  /> find . ! -type d    # , 。
    ./users2
    ./datafile3
    ./users
    ./test.tar.bz2
    /> find . -type f       # , 
    ./users2
    ./datafile3
    ./users
    ./test.tar.bz2

1
2
3
4
5
6
7
8
9
10
11
12
13

ファイルサイズで検索


-size[+/-]100[c/k/M/G]:ファイルの長さが[100ブロック[バイト/k/M/G]以上であることを示すファイル.-empty:空のファイルを検索します.
    /> find . -size +4k -exec ls -l {} \;  # 4k , 
    -rw-r--r--. 1 root root 10530 Nov 11 23:08 ./test.tar.bz2
    /> find . -size -4k -exec ls -l {} \;  # 4k 。
    -rw-r--r--. 1 root            root 279 Nov 11 08:45 ./users2
    -rw-r--r--. 1 root             root    0 Nov 12 10:02 ./datafile3
    -rwxr--r--. 1 stephen stephen 183 Nov 11 08:02 ./users
    /> find . -size 183c -exec ls -l {} \; # 183 。
    -rwxr--r--. 1 stephen stephen 183 Nov 11 08:02 ./users
    /> find . -empty  -type f -exec ls -l {} \;
    -rw-r--r--. 1 root root 0 Nov 12 10:02 ./datafile3

1
2
3
4
5
6
7
8
9
10

指定したファイルより変更時間が新しいか古いかで検索


-newer file1 ! file 2:検索ファイルの変更日はfile 1より新しいが、file 2より古いファイルである.
    /> ls -lrt   # ( ) , 。
    -rwxr--r--. 1 stephen stephen   183 Nov 11 08:02 users1
    -rw-r--r--. 1 root           root    279 Nov 11 08:45 users2
    -rw-r--r--. 1 root           root 10530 Nov 11 23:08 test.tar.bz2
    -rw-r--r--. 1 root           root        0 Nov 12 10:02 datafile3
    /> find . -newer users1     # users1 , , 。
    ./users2
    ./datafile3
    ./test.tar.bz2
    /> find . ! -newer users2   # users1 。
    ./users2
    ./users
    # users2 , test.tar.bz2 。
    /> find . -newer users2 ! -newer test.tar.bz2
    ./test.tar.bz2    

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

インスタンス-N日前のファイルを削除


文の書き方:
find対応ディレクトリ-mtime+日数-name「ファイル名」-exec rm-rf{};
find /usr/local/backups -mtime +10 -name "*.*" -exec rm -rf {} \;

1
/usr/local/backupsディレクトリの下に10日前にすべて持ってきます.」のファイル削除
手動で文を実行するたびに面倒な場合は、この文を実行可能ファイルに書き込んでcronスケジューリング実行を設定すると、システムが自動的に関連ファイルをクリーンアップできます.