중복파일 지우기

다른 사이트에서 스크랩..

시스템내 중복되어있는 파일을 정리하는데 가장쉽고 편리한 방법이 아닐까 합니다.
정규표현식 써가면서 파일싸이즈 비교해서 뽑을 필요없이 아래 패키지 설치하나로 간단히 해결…
참고
https://code.google.com/p/fdupes/
https://github.com/adrianlopezroche/fdupes

-r 옵션은 하위디렉토리 까지 모두 검색
-S 중복파일 사이즈 출력

How to use fdupes?

fdupes has a rich CLI:
fdupes -r ./stuff > dupes.txt
Then, deleting the duplicates was as easy as checking dupes.txt and deleting the offending directories. fdupes also can prompt you to delete the duplicates as you go along.

fdupes -r /home/user > /home/user/duplicate.txt

Output of the command goes in duplicate.txt.

fdupes will compare the size and MD5 hash of the files to find duplicates.

Unix: How to delete files listed in a file

This is not very efficient, but will work if you need glob patterns (as in /var/www/*)

for f in $(cat 1.txt) ; do
rm $f
done

If you don’t have any patterns, you can use xargs like so:

xargs rm < 1.txt

GEN8 microserver

한 6개월 정도 노트북+외장하드로 홈서버를 운영했었다. 외부IP는 iptime에서 지원해주는 ddns로 사용했었다. 노트북이라서 그런지 전기료 걱정은 없었다. 그러나 그래픽카드 동작시 내부 팬돌아가는 소리가 너무 시끄워 잠을 못자겠다. 뚜껑이 꺼지면 전원이 죽는 부분도 문제였고(이 부분은 노가다로 해결).

멕시코 출장가면서 노트북을 들고갔다. 서버를 떼간 꼴인데, 없으니 많이 불편했다. 그래서 조립PC를 사서 홈서버로 하려고 했으나, 눈에 HP gen8 microserver가 들어왔다. 전기료도 전기료인데 소음이 없는 제품이라 맘에 들었다.
1. 4베이 하드랙 : 인터넷 검색결과 이 가격에 4베이 지원하는 제품이 없다고 한다.
2. 저전력 : 집에 있는 PC가 500W정도 되는데..전기료 계산하면 ㅎㄷㄷ..
3. 저소음(팬이 없는 제품 맞나??)
4. 저가(서버 한대에 몇백은 할텐데 50만원도 안되다니..)
5. 우분투 공식 지원??
6. 이쁘다.

오래전부터 노트북에 우분투 12.04부터 올려 사용했는데, 하드웨어 관련 문제가 많았다.
1. optimus 기능 미지원으로 커널 패닉 : 부팅중 커널 패닉당하면… 멘붕..
2. 그래픽 드라이버 성능미달로, ubuntu+dota2 50분하면 CPU 과열로 전원 차단.
3. wifi, bluetooth 모듈 키보드로 기능차단시 동작 안됨(윈도우에서 기능 활성화 필요)
4. 키보드 기능키 안먹음
5. 노트북 커버 닫았을 때, 자동으로 절전모드 들어감 : 서버로 운영시 서버가 죽어버림.

이 개고생을 하고 나니 gen8이 우부투를 정식 지원하는지를 가장 중요하게 봤다. 다행히 캐노니컬에서 지원을 제대로 해주는 것 같았다. 인터넷 검색을 해보니 실재 gen8 microserver + ubuntu 조합으로 사용하는 인간들이 많이 있었다. 그 짓을 또 하려니 엄두가 안나 깔끔하게 gen8로 선택했다. 마누라한테 로비를 많이 했지만…

총 비용은 약 550,000원
1. HP ProLiant MicroServer Gen8, G2020T, 2GB ram, 460,000원
2. 삼성 SSD 850 EVO 120GB, 64,000원
3. HP 전용 ODD 케이블, 663771-001, 1세트, 23,000원?
4. ICY DOCK EZConvert MB882SP-1S-2B, 31,000원(배송료 포함)

CPU는 기본으로 장착이 G2020T인데, plexmemia server를 돌릴려고 하니 고민이 많이 되었다. 전에 쓰던 노트북은 i5라서 나름 괜찮은 성능이었는지 별 문제가 없었다. G2020T의 cpu rank는 2400점..노트북의 cpu rank는 5800점..약 반정도 성능..안되면 CPU를 따끈따끈한 i3로 바꾸기로 하고..일단 기본사양으로 설정했다. 이제품도 약 20만원 정도 하는데 ㄷㄷㄷ.

처음에는 ODD 위치에 SSD를 달아 사용하려 했으나, MX714 Floppy FDD to SATA Power 이 케이블을 못구했다. 인터넷에 누가 HP 전용 663771-001를 사면 쓸수 있다고 했서 3번을 샀다. 제길..안됨..돈만 날림..케이블이 분리도 안되고 커넥터도 안맞다.

깔끔하게 1번 베이에 SSD를 장착하기로..첨에는 브라켓이 없어서 위아래 스티로폼으로 맞췄는데, 역시 인터넷에서 좋은 정보가 있길래 4번 제품을 구매했다. 베이하나 날아갔으나, 결과는 대단히 만족스러웠다.

OS는 윈도우는 알지도 못하고 일단 비싸서 제외했다. 우분투로 처음에는 사용하려 했으나,
1. LTS 버전 2년마다 업그레이드시 시스템 뻑나는 경우 많음
2. LTS 버전도 5년밖에 지원안됨
3. 버전업시 기존 없던 버그 생김
등의 문제로 데비안 8을 설치했다. 역시 서버는 안건드리는게 짱이야..

데비안은 대학교때 집에 PC로 한번 설치했었는데, 사운드카드 안잡혀서 포기했었다. OS가 CD값이었는데, 요즘도 인터넷으로 DVD 이미지로 배포했다. 집에 PC가 한대라 부팅 안되면 끝이라 방법이 없었다. 지금은 휴대폰이라도 살아있어서 살릴 방법이 있어서 다행이지만..

다행히 별 문제없이 잘 설치해서 아래의 서비스를 운영하고 있다. 중간에 무슨 설정하나 건드려야 된다.raid 관련 설정인듯..

1. 홈페이지
– 홈페지는 안하려 했는데, 워드프레스 설치해 보니 새로운 세계다…이런게 무료라니!!
2. 플렉스 미디어서버 + 크롬 캐스트 조합
– 집의 싸구려?? TV가 netflix 못지않은 제품으로 변신..
3. 휴대폰 사진 관리(사진, 동영상)
– 휴대폰 사진이 너무 많아서 관리가 안되는데, mysql+php로 대충 볼수 있다. 네트웍에 있는 사진을 관리하는 프로그램이 의외로 없다. 대충 thumnail이라도 나와야 되는데, 도저히 안보임..
4. 위치 기록 로거(안드로이드 앱+드롭박스)
– 전에 구글에 비슷한 서비스를 했었는데, 나름 재미있는듯..휴대폰 로거가 하루단위로 dropbox로 자동으로 업로드..인터넷 찾아보니 역시 dropbox의 파일을 셸로 다운로드 하는 스크립트가 있었다..약간 수정해서 서버의 mysql로 자동 추가..
– 인터넷 검색하면 역시 어느 능력자가 gps 포인트에 구글 맵을 띄워주는 java script를 공개했다.

요즘 백만원도 안들이면 개인 서버가 운용 가능하다. 다른 클라우드 서비스들도 많은데, 내가 올리는 데이터들의 소유권이 이전되는게 가장 불안하다. 무서워서 페북에 애들 사진도 올리는것도 꺼려진다. 게다가 이들도 가끔씩 서버 폭파를 한다. 그러면 내 사진 및 데이터들이 다 날아가니. 이럴 바에는 해킹을 당하더라도 내가 운영해서 쓰는게 낫다. 백업정책을 잘 운용해야 하는데.

bash 스크립트로 사진정보를 mysql로 업데이트

몇개월전에 LAMP로 휴대폰으로 찍은 다수의 사진을 관리하는 페이지를 만들었다. 일정 기간이후 사진을 어느 폴더로 이동후, JPG의 EXIF에 대한 정보를 파일로 뽑아내어서, 내가 설정한 DB형식에 맞춰 추가를 해줘야 되는데 이게 좀 노가다성이 있다.

이를 해결하기 위해서 인터넷 뒤져서 아래와 같은 스크립을 만들었다. cron에 등록해서 하루에 한번씩 해주면 될것 같은데, mysql 서비스에 패스워드를 치는 부분을 사용자 입력을 기다리지 않고 자동으로 해줘야 되는데, 아직 구현하지 못했다. 나중에 보완하면 되는데 언제 할지 모르겠다.

#!/bin/bash
mytemp=$(mktemp);
mytemp2=$(mktemp);
#mytemp3=$(mktemp);
filelist=$(mktemp);
rm $1;
rm 데이터;
mysql -D myHome -u now0930 -p -e "select 날자 from picture order by 날자 desc limit 10" &gt; $mytemp;
#cat $mytemp;

#head -2 $mytemp;
#sed -n 2p $mytemp &gt; $mytemp2;

#mysql에서 마지막으로 업데이트한 날짜를 추출해서 변수로 기록
from=$(sed -n 2p $mytemp | cut -d' ' -f1);
next_from=$(date +%Y-%m-%d -d "$from + 1 day");
echo "프롬:"$from;
echo "다음날:"$next_from;
#sleep 100;
cat $mytemp2;
#cut -d ' ' -f1 $mytemp2 &gt; $mytemp3;
#cat $mytemp3;

#현재 날짜를 변수로 기록
now=$(date +%Y-%m-%d);
echo $now;

#start,end를 지움..
rm start now;

#mysql의 마지막 날짜로 touch를 사용해서 만듦.
touch --date $next_from ./start
touch --date $now ./now

echo "start, now 만들어짐";
find ~/ExtHDD/pictureToWWW/20151110/ -type f -newer ./start ! -newer ./now \
| grep -v 지울폴더 | grep -ie "jpg\|JPG\|jpeg" &gt; $1;
echo "파일 찾아짐";

#find ./ -type f -iname "*jpg" -o -iname "*mp4"\
# -newer ./start -not -newer ./now &gt; $filelist;

#echo $filelist;

# JPG 파일을 입력 받아서 meta 데이터를 출력하는 스크립트..

#1번째 인자..JPG가 입력되어 있는 파일명..

cat $1 |\
while read CMD; do

###############
#루프의 시작..
################

#ls
#eval "exiv2 -ps $1 &gt; temp"
echo "파일명 확인부";
echo $CMD
echo `exiv2 -ps $CMD &gt; temp`
echo "여기서 실행확인"
echo `cat temp`
eval "awk '/File name/{print $4}' temp &gt; 파일명";
#filename=$(echo `awk 'BEGIN{FS="\/";}{print "/imageOtherPar/"\$6"/"\$7}' temp`)
filename=$(awk 'BEGIN{FS="/";}{print "/imageOtherPar/"$6"/"$7}' 파일명);

echo "파일명"
echo $filename
echo "파일명 출력 완료"

#eval "awk '/File name/{print \$4}' temp
#$filename = $eval "awk '/File name/{print \$4}' temp"

#eval "exiv2 -px $1 &gt; temp"
echo `exiv2 -pa $CMD &gt; temp`
#eval "awk 'BEGIN{print \"EXIF 추출기\";FS=\" \";}/subject/{print \$4,\$5,\$6;}' temp &gt;&gt; 파일명"
tag=$(eval "awk '/subject/{print \$4,\$5,\$6;}' temp")
width=$(eval "awk 'BEGIN{FS=\" \";}/Image\.ImageWidth/{print \$4}' temp")
height=$(eval "awk 'BEGIN{FS=\" \";}/Image\.ImageHeight/{print \$4}' temp")
if [$height -eq ""]
then
height=$(eval "awk /'Image\.ImageLength/{print \$4}' temp")
fi

date=$(eval "awk 'BEGIN{FS=\" \";}/DateTimeOriginal/{print \$4}' temp")
time=$(eval "awk 'BEGIN{FS=\" \";}/DateTimeOriginal/{print \$5}' temp")
#latitudeRef=$(eval "awk 'BEGIN{FS=\" \";}/GPSLatitudeRef/{print \$4}' temp")
latitude=$(eval "awk 'BEGIN{FS=\" \";}/GPSLatitude/{print \$4}' temp")
#longitudeRef=$(eval "awk 'BEGIN{FS=\" \";}/GPSLongitudeRef/{print \$4}' temp")
longitude=$(eval "awk 'BEGIN{FS=\" \";}/GPSLongitude/{print \$4}' temp")

echo "테스트 영역"
echo "width:"$width
echo "height:"$height
echo "종합\n"
echo $width $height $tag $date $time $latitudeRef $latitude $longitudeRef $longitude
#echo $tag
#$tag= $eval "awk 'BEGIN{print \"EXIF 추출기\";FS=\" \";}/subject/{print \$4,\$5,\$6;}' temp"
#tag= $(awk 'BEGIN{print \"EXIF 추출기\";FS=" ";}/subject/{print \$4,\$5,\$6;}' temp)
#echo $tag

#echo $filename $tag

echo -e $latitudeRef
echo -e $latitude

#echo -e $filename "\t" $tag "\t" $date "\t" $time "\t" $width "\t" $height "\t" $latitudeRef "\t" $latitude "\t" $longitudeRef "\t" $longitude  &gt;&gt; 데이터

echo -e " \t"$date" "$time"\t"$tag"\t"$filename"\t""이미지\t"$width"\t"$height"\t"$latitude"\t"$longitude"\t"  &gt;&gt; 데이터
echo -e "너비" $width "높이" $height
echo "" &gt; temp
done

###############
#루프의 끝...
################

#echo $mytemp;
rm $mytemp;
rm $mytemp2;
#rm $mytemp3;
rm $filelist;

#아래는 mysql으로 업데이트 하는 부분..
#home 디렉토리의 .my.cnf파일을 참조해서
#자동으로 업데이트
mysql --local_infile=1 myHome -e "LOAD DATA LOCAL INFILE '데이터' INTO TABLE picture CHARACTER SET UTF8 FIELDS TERMINATED BY  '\t' "