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년 명강사의 기초튼튼 코딩 밥상
----------------------------------------------------
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
'무근본 IT 지식 공유 > 무근본 자바(JAVA)' 카테고리의 다른 글
[무근본자바] java 소스의 흐름을 분석하는 툴 만들기 (0) | 2024.03.02 |
---|---|
[무근본자바] Elk 스택에(엘라스틱서치) 쌓인 로그활용해서 내용 분석하기- 자바 코드 (0) | 2024.03.02 |
자바 생성자 규칙 - 상속 시 Super() 위치 (1) | 2023.11.25 |
‘Call by Value’와 ‘Call by Reference’에 대하여 -왕초보도 이해하는 자바 (0) | 2023.09.16 |
프로그래밍에서 추상화가 대체 뭐야?-왕초보도 이해하는 자바 (0) | 2023.09.16 |
댓글