Linux

[Linux] 원본폴더와 백업폴더의 파일 비교 후 다른 점 결과 출력

IT-PAPA 2023. 9. 21. 06:58
728x90
반응형

리눅스에서 원본폴더와 백업폴더 안에 모든 파일을 비교하여, 각 항목마다 결과파일을 각각 생성하는 스크립트다. 

1. 파일 개수 비교
2. 각 파일별 용량 비교 및 내용 비교 결과
3. 원본과 백업의 폴더 및 파일이 추가/삭제된 목록

#!/bin/bash

# 결과 파일 이름 설정
file_count_result="file_count_result.txt"
comparison_result="comparison_result.txt"
changes_result="changes_result.txt"

# 원본 폴더와 백업 폴더 경로 설정
src_dir="/home/orangepi/Downloads/comp1"
backup_dir="/home/orangepi/Downloads/comp2"

# 1. 파일 개수 비교하고, 어떤 하위 폴더의 파일의 개수가 다른지 목록 및 개수 표시
# 원본 폴더와 백업 폴더의 하위 폴더별 파일 개수를 비교하고 결과를 저장합니다.
diff_file_counts=$(diff -qr "$src_dir" "$backup_dir" | grep -E "^Only in $src_dir|^Only in $backup_dir")

# 원본 폴더와 백업 폴더의 파일 개수를 비교하고 결과를 저장합니다.
src_file_count=$(find "$src_dir" -type f | wc -l)
backup_file_count=$(find "$backup_dir" -type f | wc -l)

# 결과 파일에 파일 개수 비교 결과 저장
echo "원본 폴더 파일 개수: $src_file_count" > "$file_count_result"
echo "백업 폴더 파일 개수: $backup_file_count" >> "$file_count_result"

# 결과 파일에 파일 개수 비교 결과 저장
echo "하위 폴더의 파일 개수 비교 결과:" >> "$file_count_result"
echo "$diff_file_counts" >> "$file_count_result"

# 2. 각 파일별 용량 및 날짜 비교 후 다른 목록 추출
# 원본 폴더와 백업 폴더의 파일을 비교하고 크기와 수정일자가 다른 파일을 저장합니다.
find "$src_dir" -type f | while read -r src_file; do
    relative_path="${src_file#$src_dir}"
    backup_file="$backup_dir$relative_path"

    # 파일이 존재하지 않는 경우 무시
    if [ ! -e "$backup_file" ]; then
        continue
    fi

    # 파일 크기 및 수정일자 비교
    src_size=$(stat -c%s "$src_file")
    backup_size=$(stat -c%s "$backup_file")
    src_mtime=$(stat -c%Y "$src_file")
    backup_mtime=$(stat -c%Y "$backup_file")

    # 크기 또는 수정일자가 다른 경우 결과 파일에 저장
    if [ $src_size -ne $backup_size ] || [ $src_mtime -ne $backup_mtime ]; then
        echo "파일 $relative_path: 크기 또는 수정일자 다름" > "$comparison_result"
    fi
done

# 3. 원본과 백업의 폴더 및 파일 추가/삭제 목록
# 원본 폴더와 백업 폴더를 비교하여 추가/삭제된 폴더 및 파일을 저장합니다.
src_changes=$(diff -rq "$src_dir" "$backup_dir")

# 결과 파일에 저장
echo "$src_changes" > "$changes_result"

# 결과 파일 출력
echo "1. 파일 개수 비교 결과:"
cat "$file_count_result"
echo
echo "2. 각 파일별 용량 및 날짜 비교 결과:"
cat "$comparison_result"
echo
echo "3. 원본과 백업의 폴더 및 파일 추가/삭제 목록:"
cat "$changes_result"

 

원본과 비교대상 폴더 내용
원본과 비교대상 폴더 내용
쉘 실행 결과
쉘 실행 결과

 

728x90
반응형
LIST