개발, 웹, 블로그/Linux 상식

Linux에서 watch로 df 시에 변경부분만 표시하는 script

삼성동고양이 2024. 10. 29. 08:29
반응형

포인트

  • 그냥 watch 사용시에는 어디가 바꼈는지 매번 눈으로 확인해야 하는데, 이것을 diff 명령어로 틀린 부분만 표시할 수 있음.
  • 색을 표시하는 부분은 색코드를 직접 이용할 수 있지만 watch 명령어와 사용시 색이 표시 되지 않고 색 코드가 그대로 노출되는 되기 때문에 일반적으로 output에 색코드를 직접 기입하는 대신에 tput을 이용하면 색을 표시할 수 있음

샘플 코드

#!/bin/bash

# temp file
LAST_OUTPUT="/tmp/last_df_output.txt"
NEW_OUTPUT="/tmp/new_df_output.txt"

# color supporting check
if [ -t 1 ]; then
    RED=$(tput setaf 1)
    RESET=$(tput sgr0)
else
    RED=""
    RESET=""
fi

# initial output 
df -h > "$LAST_OUTPUT"

while true; do
    # new output
    df -h > "$NEW_OUTPUT"

    if ! cmp -s "$NEW_OUTPUT" "$LAST_OUTPUT"; then
        clear
        # diff will be printed in red color
        diff --unchanged-line-format="%L" --old-line-format="" --new-line-format="${RED}%L${RESET}" "$LAST_OUTPUT" "$NEW_OUTPUT"
    fi

    # last output store
    mv "$NEW_OUTPUT" "$LAST_OUTPUT"

    # time interval
    sleep 1
done
반응형