MENU
Language

MacOS:ターミナル(Terminal):フォルダ検索と容量の計測を行う際にプログレスバーを表示して結果をファイル出力する

MacOSのターミナル(Terminal)でフォルダ検索と容量の計測を行う際にプログレスバーを追加するためには、find コマンドと併用して pv コマンドを使用する方法があります。ただし、pv はデフォルトではインストールされていないため、Homebrewなどを使ってインストールする必要があります。

以下の例では、Python の仮想環境のディレクトリ名としてよく使われるvenvvenv2フォルダを検索する例です。該当フォルダの容量と、ディレクトリ名を表示します。また、プログレスバーを表示して、進捗度合いを可視化します。

必要なツールをインストール

Homebrewがインストールされていない場合、インストール

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

pv をインストール

brew install pv

コマンド – ディレクトリ検索

venv または venv2 ディレクトリを検索し、それらの容量とパスをタブ区切り形式で出力する。

sudo find / \( -name "venv" -o -name "venv2" \) -type d 2>/dev/null | while read dir; do du -sh "$dir"; done | awk '{print $1 "\t" $2}'

sudo find / \( -name "venv" -o -name "venv2" \) -type d 2>/dev/null

  • sudo find /: ルートディレクトリから検索を開始します(管理者権限が必要なため sudo を使用)。
  • \(-name "venv" -o -name "venv2"\): 名前が venv または venv2 のディレクトリを対象にします。
  • -type d: ディレクトリのみを検索対象にします。
  • 2>/dev/null: 権限不足などによるエラーメッセージを非表示にします。

2. while read dir; do du -sh "$dir"; done

  • while read dir; do: find コマンドで見つかった各ディレクトリを1つずつ処理します。
  • du -sh "$dir": 各ディレクトリの容量を取得します。

3. awk '{print $1 "\t" $2}'

  • awk: du の出力を処理します。
  • $1: 最初の列(容量)を取得。
  • $2: 2列目(ディレクトリのパス)を取得。
  • "\t": 2列目との間にタブを挿入。

コマンド – プログレスバーを表示し結果をファイル出力する

timestamp=$(date +%Y%m%d_%H%M%S) && total=$(sudo find / \( -name "venv" -o -name "venv2" \) -type d 2>/dev/null | wc -l) && sudo find / \( -name "venv" -o -name "venv2" \) -type d 2>/dev/null | pv -l -s $total | while read dir; do du -sh "$dir" | awk -v OFS="\t" '{print $1, $2}'; done > output_${timestamp}.tsv

timestamp=$(date +%Y%m%d_%H%M%S)

  • dateコマンドで現在の日付と時刻を取得します。
  • フォーマット例: 20241224_153045(2024年12月24日 15時30分45秒)。

total=$(...) &&

  • 事前にディレクトリ数をカウントし、total変数に保存します。
  • && で次のコマンドを連結し、カウントが成功した場合にのみ処理を進めます。

sudo find / \( -name "venv" -o -name "venv2" \) -type d 2>/dev/null

  • ルートディレクトリから、名前がvenvまたはvenv2のディレクトリを検索します。
  • 権限不足によるエラーメッセージを2>/dev/nullで非表示にします。

| pv -l -s $total

  • プログレスバーを表示します。
  • -lオプションにより、行数ベースでプログレスバーが更新されます。
  • pv に事前カウントしたディレクトリ数(total)を渡し、プログレスバーを正確に表示します。

while read dir; do … done

  • 各検索結果(ディレクトリ名)を1行ずつ処理します。

du -sh "$dir"

  • 現在のディレクトリの容量を人間が読みやすい形式(例: 12M, 3.2G)で取得します。

awk -v OFS="\t" '{print $1, $2}'

  • 容量とパスをタブ区切り形式で整形します。

output_${timestamp}.tsv

  • timestamp変数をファイル名に動的に組み込みます。

実行結果例

実行中にプログレスバーが表示され、処理が終わるとタブ区切りの結果が出力されます。

プログレスバー例:

 0:00:05 [ 10/100 ] ██████▍                             ETA 0:00:45

出力例:(output_${timestamp}.tsv):

12M    /Users/username/projects/venv
50M    /var/www/app/venv2
1.2G   /opt/old_project/venv

補足

  • pv の出力形式のカスタマイズ
    必要に応じて、pv の設定(表示形式や更新頻度)を調整できます。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

AIアーティスト | エンジニア | ライター | 最新のAI技術やトレンド、注目のモデル解説、そして実践に役立つ豊富なリソースまで、幅広い内容を記事にしています。フォローしてねヾ(^^)ノ

コメント

コメントする

目次