본문 바로가기
  • _^**_
무근본 IT 지식 공유/무근본 자바(JAVA)

[무근본자바] 리눅스 특정 경로와 다른 경로에 있는 파일의 사이즈가 동일한지 파악하는 쉘/자바프로그램 만들어보기

by 크리드로얄워터 2024. 3. 2.
반응형

ex) 경로는 root 경로에 포함된 숫자만 하나 다름

* 경로 예시


1)/run/dep/xxx.png
2)/run2/dep/xxx.png

-조건: png는 여러개파일이 있으며 상위 폴더는 세자리의 코드로 계속 바뀜(세자리인지 검증 필요) 코드값으로 이루어진 디렉터리 역시 shbrun 하위에 여러개가 있음






파일 사이즈 비교 작업을 쉘 스크립트로 수행하는 것은 효율적이며 직관적인 접근 방식입니다. 하지만, 자바로도 이 작업을 수행할 수 있습니다. 여기에 두 방식을 모두 제공하겠습니다.

쉘 스크립트 방식

1. 경로 검증

상위 폴더 이름이 세 자리 코드인지 확인합니다.

2. 파일 사이즈 비교

지정된 두 경로 내의 파일들의 사이즈를 비교합니다.

쉘 스크립트 예시:


#!/bin/bash

# 경로1 및 경로2의 기본 구조 정의
base_path1="/run/dep"
base_path2="/run2/dep"

# 경로 검증 로직 (옵셔널)
# 여기서는 상위 폴더의 형식이 세 자리인지 직접 검증하지는 않습니다.

# 경로1과 경로2 내의 모든 .png 파일 비교
find $base_path1 -type f -name "*.png" | while read path1; do
  # path1에서 대응하는 path2 생성
  path2=$(echo $path1 | sed 's/run/run2/')

  if [ -f "$path2" ]; then
    size1=$(stat -c %s "$path1")
    size2=$(stat -c %s "$path2")

    if [ $size1 -eq $size2 ]; then
      echo "Match: $path1 and $path2 are of the same size."
    else
      echo "Mismatch: $path1 and $path2 have different sizes."
    fi
  else
    echo "No match found for $path1 in path2."
  fi
done


이 스크립트는 `run` 및 `run2` 경로 내의 모든 `.png` 파일을 찾아 각각의 파일 사이즈를 비교합니다. 파일의 사이즈가 동일하면 일치한다고 출력하고, 그렇지 않으면 불일치한다고 출력합니다. 파일이 `run2` 경로에 존재하지 않으면, 해당 파일에 대한 경로2의 일치 항목이 없다고 출력합니다.


자바 방식


자바에서는 파일 I/O 및 파일 속성 접근을 위한 `java.nio.file` 패키지를 사용할 수 있습니다. 자바 코드는 일반적으로 더 많은 줄을 요구하지만, 크로스 플랫폼 호환성과 객체 지향 접근 방식의 이점을 제공합니다.


import java.io.IOException;
import java.nio.file.*;
import java.util.stream.Stream;

public class FileSizeComparator {
    public static void main(String[] args) {
        Path basePath1 = Paths.get("/run/dep");
        Path basePath2 = Paths.get("/run2/dep");

        try (Stream<Path> paths = Files.walk(basePath1)) {
            paths.filter(Files::isRegularFile)
                 .filter(path -> path.toString().endsWith(".png"))
                 .forEach(path1 -> {
                     Path path2 = basePath2.resolve(basePath1.relativize(path1)).normalize();
                     try {
                         if (Files.exists(path2) && Files.isRegularFile(path2)) {
                             long size1 = Files.size(path1);
                             long size2 = Files.size(path2);
                             if (size1 == size2) {
                                 System.out.println("Match: " + path1 + " and " + path2 + " are of the same size.");
                             } else {
                                 System.out.println("Mismatch: " + path1 + " and " + path2 + " have different sizes.");
                             }
                         } else {
                             System.out.println("No match found for " + path1 + " in path2.");
                         }
                     } catch (IOException e) {
                         e.printStackTrace();
                     }
                 });
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}





--------------------------------------------------------------------------------------------------------

@@@자바 책 추천
https://link.coupang.com/a/bsBPhC

Do it! 자바 프로그래밍 입문 : 개발 10년 강의 10년 명강사의 기초튼튼 코딩 밥상

COUPANG

www.coupang.com

Do it! 자바 프로그래밍 입문 : 개발 10년 강의 10년 명강사의 기초튼튼 코딩 밥상
----------------------------------------------------
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

반응형

댓글