世界を探る

6142 ワード

findUnix/Linuxコマンドラインツールボックスの最高のコマンドの1つです.動作方法:ファイル階層に沿って下に遍歴し、条件に合致するファイルに一致し、対応する操作を実行します.
テストしたディレクトリ構造をプレビューします
➜  findtest tree
.
|____1.txt
|____one
| |____one_1.txt
| |____two
| | |____two_2.txt
|____three
| |____three_1.txt
|____two
| |____two_1.txt

-name

-nameファイル名に一致する文字列を指定し、ワイルドカードを使用できる*ある特徴のファイルに一致する
'*'shellでは任意の文字で、他の正規言語の'.'と同じです.
  • 現在のディレクトリの下にあるものをすべてリスト.txt
  • ➜  findtest find . -name "*.txt"
    ./1.txt
    ./one/one_1.txt
    ./one/two/two_2.txt
    ./three/three_1.txt
    ./two/two_1.txt
    
  • リストtwo関連書類
  • ➜  findtest find . -name 'two*' 
    ./one/two
    ./one/two/two_2.txt
    ./two
    ./two/two_1.txt
    

    ここにはファイルとディレクトリがリストされていますが、ファイルやディレクトリを表示するだけではどうすればいいですか?

    -type

    -type検索するファイルの種類を指定できる
  • カタログのみ
  • ➜  findtest find . -name 'two*' -type d 
    ./one/two
    ./two
    
  • 書類のみ
  • ➜  findtest find . -name 'two*' -type f 
    ./one/two/two_2.txt
    ./two/two_1.txt
    
    -type複数の選択肢がある
    ファイルの種類
    タイプパラメータ
    標準ファイル
    f
    目次
    d
    シンボルリンク
    l
    キャラクタデバイス
    c
    ブロックデバイス
    b
    ソケット
    s
    FIFO
    p findファイルの検索は最初のステップですが、通常は削除、コピーなど、検索したファイルについていくつかの操作を行います

    -delete


    一致するファイルを削除
    ➜  findtest tree
    .
    |____1.txt
    |____one
    | |____one_1.txt
    | |____two
    | | |____two_2.txt
    |____three
    | |____three_1.txt
    |____two
    | |____two_1.txt
    ➜  findtest find . -name 'three_1.txt' -delete
    ➜  findtest tree
    .
    |____1.txt
    |____one
    | |____one_1.txt
    | |____two
    | | |____two_2.txt
    |____three
    |____two
    | |____two_1.txt
    ➜  findtest
    

    前後の目次比較で削除したことが判明three_1.txt

    -exec

    -delete命令は単一削除のみ、より多くの操作を行う場合は使用のみ-execfind命令は利用可能-exec他の命令と結合する.{}は、一致する各項目を表します.
  • マッチしたもの.txtコピーthree
  • ➜  findtest tree                                       
    .
    |____1.txt
    |____one
    | |____one_1.txt
    | |____two
    | | |____two_2.txt
    |____three
    |____two
    | |____two_1.txt
    ➜  findtest find .  -name "*.txt" -exec cp {} ./three \;
    cp: ./three/1.txt and ./three/1.txt are identical (not copied).
    cp: ./three/one_1.txt and ./three/one_1.txt are identical (not copied).
    cp: ./three/two_2.txt and ./three/two_2.txt are identical (not copied).
    ➜  findtest tree
    .
    |____1.txt
    |____one
    | |____one_1.txt
    | |____two
    | | |____two_2.txt
    |____three
    | |____1.txt
    | |____one_1.txt
    | |____two_1.txt
    | |____two_2.txt
    |____two
    | |____two_1.txt
    

    最後の結果は我々が予想したものであるが,中間に異常なヒントがあり,これはしばらく気にしないで,後続の選択肢を学習すればcp:./three/1.txt and ./three/1.txt are identical (not copied).

    -path


    オプション-pathワイルドカードでファイルパスを一致させることができる-nameファイル名を一致させる-pathファイルパスを全体として一致させる
  • リストthree.txt
  • ➜  findtest find . -name '*.txt' -path '**/three/**'
    ./three/1.txt
    ./three/one_1.txt
    ./three/two_1.txt
    ./three/two_2.txt
    ➜  findtest 
    

    !


    '!'他の言語と同じように、「否定する、反逆する」という意味です.
  • 非リストthree.txt
  • ➜  findtest find . -name '*.txt' ! -path '**/three/**'
    ./1.txt
    ./one/one_1.txt
    ./one/two/two_2.txt
    ./two/two_1.txt
    

    ありました'!'、'-path'、'-name'は私たちの上のcp異常を解決することができます
  • 削除threeのうち.txt、復元ディレクトリ
  • ➜  findtest find . -name '*.txt'  -path '**/three/**' -delete
    ➜  findtest tree
    .
    |____1.txt
    |____one
    | |____one_1.txt
    | |____two
    | | |____two_2.txt
    |____three
    |____two
    | |____two_1.txt
    ➜  findtest
    
  • マッチしたもの.txtコピーthree
  • ➜  findtest find . -name '*.txt' ! -path "**/three/**" -exec cp {} ./three \;
    ➜  findtest tree
    .
    |____1.txt
    |____one
    | |____one_1.txt
    | |____two
    | | |____two_2.txt
    |____three
    | |____1.txt
    | |____one_1.txt
    | |____two_1.txt
    | |____two_2.txt
    |____two
    | |____two_1.txt
    ➜  findtest 
    

    今は警告が全くありません

    atime、mtime、ctime


    Unixファイルシステムの各ファイルには、3つのタイムスタンプがあります.
  • アクセス時間(atime):ユーザが最近ファイルにアクセスした時間
  • 修正時間(mtime):ファイル内容が最後に修正された時間
  • 変更時間(ctime):ファイルソースデータ(例えば権限)が最後に変更された時間
  • -atimemtimectimefindの時間オプションとして、整数値を指定できます.単位は日です.通常前方には-+-より小さい、+より大きい
  • 最近訪問したものを探し出す.txt
  • ➜  findtest find . -name '*.txt' -atime -1
    ./1.txt
    ./one/one_1.txt
    ./one/two/two_2.txt
    ./three/1.txt
    ./three/one_1.txt
    ./three/two_1.txt
    ./three/two_2.txt
    ./two/two_1.txt
    
  • 10日前に訪れたものをリストアップ.txt
  • ➜  findtest find . -name '*.txt' -atime +10
    ➜  findtest 
    

    このディレクトリは私が今日作成したので、一致していません.
    分単位の時間オプションもございます
  • amin
  • mmin
  • cmin

  • -size

    findのファイルサイズが短いオプション-size
  • リストが小さい1k.txt
  • ➜  findtest find . -name '*.txt' -size -1k
    ./1.txt
    ./one/one_1.txt
    ./one/two/two_2.txt
    ./three/1.txt
    ./three/one_1.txt
    ./three/two_1.txt
    ./three/two_2.txt
    ./two/two_1.txt
    

    その他の単位:
    たんい
    説明する
    b
    ブロック(512バイト)
    c
    バイト
    w
    ワード(2バイト)
    k
    1024バイト
    M
    1024 Kバイト
    G
    1024 Mバイト

    -prune


    一部のディレクトリを検索するには、いくつかのディレクトリをスキップしてパフォーマンスを向上させる必要がある場合があります.例えば.git.svnあるディレクトリを検索パスから除外するというテクニックは
  • 非リストthree.txt
  • ➜  findtest find . \( -name "three"  -prune \) -o \( -name '*.txt' \) 
    ./1.txt
    ./one/one_1.txt
    ./one/two/two_2.txt
    ./three
    ./two/two_1.txt
    
    ➜  findtest find . ! -path  "**/three/**"   -name '*.txt'  
    ./1.txt
    ./one/one_1.txt
    ./one/two/two_2.txt
    ./two/two_1.txt
    ➜  findtest 
     
    

    终止语:常用find探索世界~~