bash script > 두 디렉토리에 있는 같은 이름의 파일 찾기 > (문자열 바꾸기/diff로 찾는 방법) > RANDOM으로 처리/하지 않는다 > diff에서는 같은 이름으로 내용이 다른 파일을 찾을 수 없다
14107 단어 diff#migratedBashWRFdifference
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.4.7 (とgfortran)
NCAR Command Language Version 6.3.0
WRF v3.7.1
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
다음을 수행하고 싶습니다.
목적은 WRF(Weather Research and Forecasting Model)로 처리한 결과 화상의 비교.
v0.1 > 문자열 대체 + if [ -e
두 디렉토리에 같은 이름의 파일이 있는지 확인하는 bash script를 구현해 보았습니다.
참고 (문자열 바꾸기) htp // d. 하테나. 네. jp/오즈마/20130928/1380380390
code
compare_images_170127_exec
#!/usr/bin/env bash
#
# v0.1 Jan,27,2017
# - find files in both directories
#
if [ $# -lt 2 ]; then
echo "Usage:"
echo " [cmd] [source1 dir] [source2 dir]"
echo " to compare files with same names in 2 dirs"
echo
exit
fi
src1dir=$1
src2dir=$2
#echo $src1dir
#echo $src2dir
for src1file in $(ls $src1dir/*.png);do
# echo $src1file
src2file=${src1file/$src1dir/$src2dir}
if [ -e $src2file ]; then
echo $src2file
fi
#break; // for debug
done
테스트 데이터 생성
mkdir WORK_A
mkdir WORK_B
touch WORK_A/AAA.png
touch WORK_A/BBB.png
touch WORK_A/CCC.png
touch WORK_A/DDD.png
touch WORK_B/BBB.png
touch WORK_B/DDD.png
이것으로 BBB.png와 DDD.png만 공통이 된다.
실행 예 > 인수 없음 (사용법 표시)
$ bash compare_images_170127_exec
Usage:
[cmd] [source1 dir] [source2 dir]
to compare files with same names in 2 dirs
실행 예 > 인수 있음 (파일 이름 표시)
$ bash compare_images_170127_exec WORK_A WORK_B
WORK_B/BBB.png
WORK_B/DDD.png
더 쉬운 방법
있으면 알고 싶다.
이었다.
h tp : / / s t c ゔ rf ぉ w. 코 m / 쿠에 s 치온 s / 10087571 / ゔ ぇ ぇ ぉ ぢ れ c와 ry t ええ s ー ー ー ー ー ぃ ん ぃ ぃ ぃ ぇー사메
$ diff -srq WORK_A WORK_B
Only in WORK_A: AAA.png
Files WORK_A/BBB.png and WORK_B/BBB.png are identical
Only in WORK_A: CCC.png
Files WORK_A/DDD.png and WORK_B/DDD.png are identical
$ diff -srq WORK_A/ WORK_B/ | grep identical
Files WORK_A/BBB.png and WORK_B/BBB.png are identical
Files WORK_A/DDD.png and WORK_B/DDD.png are identical
v0.2 > diff -srq
diff -srq 사용
code
compare_images_170127_exec
#!/usr/bin/env bash
# v0.2 Jan,27,2017
# - use [diff -srq]
# v0.1 Jan,27,2017
# - find files in both directories
#
if [ $# -lt 2 ]; then
echo "Usage:"
echo " [cmd] [source1 dir] [source2 dir]"
echo " to compare files with same names in 2 dirs"
echo
exit
fi
src1dir=$1
src2dir=$2
res=$(diff -srq $src1dir $src2dir | grep identical | awk '{print $2}')
for afile in $res;do
echo $afile
done
상기 20 행의
print $2
에 의해 src1dir 측의 파일명을 취득한다.(Note: 코드의 20행째, 라고 하는 것은 Q Accelerator (을)를 사용하면(자), 곧바로 볼 수 있습니다).
결과
$ bash compare_images_170127_exec WORK_A WORK_B
WORK_A/BBB.png
WORK_A/DDD.png
v0.3 > 처리/없음 선택 > RANDOM 사용
code
compare_images_170127_exec
#!/usr/bin/env bash
# v0.3 Jan,27,2017
# - add condition using $RANDOM to process or not
# v0.2 Jan,27,2017
# - use [diff -srq]
# v0.1 Jan,27,2017
# - find files in both directories
#
if [ $# -lt 2 ]; then
echo "Usage:"
echo " [cmd] [source1 dir] [source2 dir]"
echo " to compare files with same names in 2 dirs"
echo
exit
fi
src1dir=$1
src2dir=$2
THRESHOLD=16384 # should be <= [32767]
# set smaller to increase the probability
# set larger to decrease the probability
res=$(diff -srq $src1dir $src2dir | grep identical | awk '{print $2}')
for afile in $res;do
if [ $RANDOM -lt $THRESHOLD ]; then
continue
fi
echo $afile
done
실행
$ bash compare_images_170127_exec WORK_A WORK_B
$ bash compare_images_170127_exec WORK_A WORK_B
WORK_A/DDD.png
$ bash compare_images_170127_exec WORK_A WORK_B
WORK_A/BBB.png
diff에서 안 됨 > 동일한 파일 만 검색에서 찾을 수 있습니다.
같은 파일명으로, 작성 일시가 다른 (게다가 내용도 조금 다른) 파일은
diff -srq
에서는 발견되지 않는다고 깨달았다.v0.5 > diff -srq 중지 / html 출력
code
compare_images_170127_exec
#!/usr/bin/env bash
# v0.5 Jan,27,2017
# - remove [diff -srq] because diff only picks up "the same file"
# v0.4 Jan,27,2017
# - add html_output()
# v0.3 Jan,27,2017
# - add condition using $RANDOM to process or not
# v0.2 Jan,27,2017
# - use [diff -srq]
# v0.1 Jan,27,2017
# - find files in both directories
#
html_output() {
in1file=$1
in2file=$2
echo "$in1file<br>"
echo -n "<table>"
echo -n "<tr>"
echo -n "<td>"
echo -n "<img src=$in1file width=300></img>"
echo -n "</td>"
echo -n "<td>"
echo -n "<img src=$in2file width=300></img>"
echo -n "</td>"
echo -n "</tr>"
echo -n "</table>"
echo
}
if [ $# -lt 2 ]; then
echo "Usage:"
echo " [cmd] [source1 dir] [source2 dir]"
echo " to compare files with same names in 2 dirs"
echo
exit
fi
src1dir=$1
src2dir=$2
THRESHOLD=16384 # should be <= [32767]
# set smaller to increase the probability
# set larger to decrease the probability
for src1file in $(ls $src1dir/*.png);do
#echo $src1file
src2file=${src1file/$src1dir/$src2dir}
if [ -e $src2file ]; then
if [ $RANDOM -lt $THRESHOLD ]; then
continue
fi
#echo $src2file
html_output $src1file $src2file
#break; // for debug
fi
done
처리 결과
화상 사이즈는 적절히 조정한다.
2개의 차이는 무엇에 기인하는 것인가.
모야모야.
TODO 목록
두 디렉토리에있는 동일한 이름의 파일 비교
무작위로 꺼내기
파일 (png 이미지)을 비교 한 HTML 파일 생성 (제목 포함)
pdf화
Reference
이 문제에 관하여(bash script > 두 디렉토리에 있는 같은 이름의 파일 찾기 > (문자열 바꾸기/diff로 찾는 방법) > RANDOM으로 처리/하지 않는다 > diff에서는 같은 이름으로 내용이 다른 파일을 찾을 수 없다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/7of9/items/d60d96e770d71cafb479텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)