findでファイル名の検索 macOS/Linux/Unixシェルコマンド

findでファイル名の検索 macOS/Linux/Unixシェルコマンド
findでファイル名の検索 macOS/Linux/Unixシェルコマンド

macOSのターミナルで使えるfindコマンドの使い方をご紹介します。findコマンドは、特定のディレクトリ下存在するファイル群を、ファイル名で検索できる便利なコマンドです。高速で動作し、ワイルドカードなどの正規表現も使えます。パイプを使って他のコマンドと組み合わせると、一括処理もラクラクできちゃいます。ぜひ、findコマンドをご活用ください!

特定のディレクトリ下を、ファイル名で検索する

zsh
find [ターゲットディレクトリ] -name 'ファイル名の文字列'
zsh
find . -name '*arduino*'
zsh
find . -name 'arduino-yogrut-maker*'

最近更新されたファイルを検索する

zsh
find . -type f -mmin -10

findとmvで一括で移動させる

zsh
find . -name 'IMG*' | xargs -I% mv -f % ~/.Trash

指定されたサイズ以上のファイルを一覧で表示する

macOSのターミナルで指定ディレクトリ内のファイルを再帰的に調べ、指定されたサイズ以上のファイルを一覧で表示する例:

zsh
find /path/to/directory -size +1M

カレントディレクトリを対象に特定の拡張子を除外し、詳細なファイル情報を表示と容量に合わせて昇順にソートする例:

zsh
find . -size +1M -not -name "*.gif" -exec ls -lh {} + | sort -k 5 -n

応用: 画像を一括リサイズする

bash
#!/bin/bash

# ディレクトリ、サイズ制限(バイト単位)、リサイズ後の最大幅または高さを指定
TARGET_DIRECTORY="."
SIZE_LIMIT=2000000  # 2MBを超えるファイルを検索
MAX_DIMENSION=1500  # 最大幅または高さ

# 指定されたディレクトリ以下のjpg, jpeg, JPEG, pngファイルを検索し、それぞれに対して処理
find "$TARGET_DIRECTORY" \( -iname '*.jpg' -o -iname '*.jpeg' -o -iname '*.png' -o -iname '*.PNG' \) -print0 | while IFS= read -r -d $'\0' file; do
    # ファイルサイズを取得
    filesize=$(stat -f%z "$file")
    
    # ファイルサイズが指定サイズを超える場合、リサイズ
    if [ $filesize -gt $SIZE_LIMIT ]; then
        echo "Resizing $filesize $file..."
        sips -Z $MAX_DIMENSION "$file" --out "$file"
    fi
done

echo "Done."

このスクリプトは画像を上書きするので、実行前には必ずバックアップを取ってください。

関連記事

最後までご覧いただきありがとうございます!

▼ 記事に関するご質問やお仕事のご相談は以下よりお願いいたします。
お問い合わせフォーム