LinuxベースLinuxベース:ファイル検索find

4034 ワード

前に書く


linuxの日常管理ではfindの使用頻度が高く、熟練した把握は仕事の効率を高めるのに役立ちます.
findの文法は比較的簡単で、よく使われるパラメータはいくつかあります.例えば、-name-type-ctimeなどです.初心者は第2部の例を直接見て、パラメータの説明をさらに理解する必要がある場合はfindのヘルプドキュメントを参照することができます.
find構文は次のとおりです.
find(オプション)(パラメータ)

よく使われる例


ファイル名で検索


現在のディレクトリとサブディレクトリの下にあるすべてのファイルをリストします.
find .

現在のディレクトリの下にある名前11.pngのファイルを見つけます.
find . -name "11.png"

現在のディレクトリの下にあるすべてのjpgファイルを見つけます.
find . -name "*.jpg"

現在のディレクトリの下にあるjpgファイルとpngファイルを見つけます.
find . -name "*.jpg" -o -name "*.png"

現在のディレクトリの下にpngではないファイルを見つけます.
find . ! -name "*.png"

正規表現で検索


備考:正規表現は思ったより複雑で、いくつかのタイプをサポートしています.参照ここ
現在のディレクトリを検索すると、ファイル名はすべて数値のpngファイルです.
find . -regex "\./*[0-9]+\.png" 

パスに基づいて検索


現在のディレクトリの下にあるwysiwygを含むファイル/パスを見つけます.
find . -path "*wysiwyg*"

ファイルの種類に応じて検索

-typeでファイルタイプのフィルタリングを行います.
  • f一般ファイル
  • lシンボル接続
  • dディレクトリ
  • c文字デバイス
  • bブロックデバイス
  • sソケット
  • p Fifo

  • たとえば、現在のディレクトリの下にあるwysiwygを含むファイルを検索します.
    find . -type f -path "*wysiwyg*"

    検索深度の制限


    現在のディレクトリの下にあるすべてのpngを見つけます.サブディレクトリは含まれません.
    find . -maxdepth 1 -name "*.png"

    これに対応して、mindepthオプションでもあります.
    find . -mindepth 2 -maxdepth 2 -name "*.png"

    ファイルサイズによる


    ファイルサイズは-sizeでフィルタされます.サポートされるファイルサイズユニットは次のとおりです.
  • b-ブロック(512バイト)
  • c-バイト
  • w——ワード(2バイト)
  • k-KB
  • M——メガバイト
  • G-ギガバイト
  • たとえば、現在のディレクトリのファイルサイズが100 Mを超えるファイルを見つけます.
    find . -type f -size +100M 

    アクセス/変更/変更時間に応じて


    次の時間タイプをサポートします.
  • アクセス時間(-atime/日、-amin/分):ユーザーの最近のアクセス時間.
  • 変更時間(-mtime/日、-mmin/分):ファイルの最後の変更時間.
  • 変更時間(-ctime/日、-cmin/分):ファイルデータ要素(権限など)の最後の変更時間.

  • 例えば、1日以内に修正されたファイルを探し出す
    find . -type f -mtime -1

    最近1週間以内にアクセスされたファイルを特定
    find . -type f -atime -7

    ログ・ディレクトリの1週間以上のログ・ファイルを/tmp/old_logsに移動します.
    find . -type f -mtime +7 -name "*.log" -exec mv {} /tmp/old_logs \;

    注:{}は、-execオプションと組み合わせて使用してすべてのファイルに一致し、対応するファイル名に置き換えられます.
    また、\;はコマンドが終了したことを示すために使用され、追加されていない場合は、次のようなヒントがあります.
    find: -exec: no terminating ";" or "+"

    権限による

    -permによって実現される.たとえば、現在のディレクトリの下にある権限が777のファイルを見つけます.
    find . -type f -perm 777

    現在のディレクトリの下にある権限が644ではないphpファイルを見つけます.
    find . -type f -name "*.php" ! -perm 644

    ファイル所有者別


    ファイルの所有者がrootのファイルを見つけます.
    find . -type f -user root

    ファイルが存在するグループrootのファイルを見つけます.
    find . -type f -group root

    ファイルが見つかったらコマンドを実行

    -ok、および-execによって実現される.違いは、-okコマンドを実行する前に二次確認が行われ、-execは行われません.
    実例を見てみましょう.現在のディレクトリの下にあるすべてのjsファイルを削除します.-okの効果で下記の通り、削除前に二次確認があります
    ➜  find find . -type f -name "*.js" -ok rm {} \;
    "rm ./1.js"? 

    試しに-exec.直接削除しました
    find . -type f -name "*.js" -exec rm {} \;

    空のファイルを見つける


    例は以下の通り
    touch {1..9}.txt
    echo "hello" > 1.txt
    find . -empty