제가 작성한 스크립트가 있습니다. 완벽하게 실행됩니다. 하지만 실행하는 데 4일이 걸릴 것으로 예상됩니다! 이 작업을 수행하는 더 효율적인 방법이 있는지 궁금합니다.
스크립트는 다음을 수행합니다.
- 이미지 서버에서 모든 파일을 가져와서 로드합니다.이미지서버.txt
- grep의 파일 경로 형식을 지정합니다.
- 순환하다이미지서버.txt그리고
/var/www/html
각 줄마다 grep - 나중에 사용할 수 있도록 2개의 형식화된(기존 및 존재하지 않는) 파일 작성
tail
스크립트 진행 상황을 추적하기 위해 로그 파일에 쓰기
2개의 파일이 있습니다.
이미지서버.txt (약 250,000라인)
imageserver/icons/socialmedia/sqcolor_tumblr.png imageserver/icons/socialmedia/sqcolor_gaf.png imageserver/icons/socialmedia/sqcolor_yelp.png imageserver/icons/socialmedia/sqcolor_linkedin.png imageserver/icons/socialmedia/sqcolor_twitter.png imageserver/icons/socialmedia/sqcolor_angies.png imageserver/icons/socialmedia/sqcolor_houzz.png
search.sh
#!/bin/bash echo "\n\n Started ...\n\n" # Clear Runtime Files > doesExist.txt > nonExists.txt > imgSearch.log echo "\n\n Building Image List ...\n\n" #write contents of imageserver to imageserver.txt find /var/www/imageserver/ -type f > imageserver.txt # Remove /var/www find ./imageserver.txt -type f -readable -writable -exec sed -i "s/\/var\/www\///g" {} \; echo "\n\n Finished Building Start Searching ...\n\n" linecount=$(wc -l < ./imageserver.txt) while IFS= read -r var do echo "$linecount\n\n" echo "\n ... Searching $var\n " results=$(grep -rl "$var" /var/www/html) if [ $? -eq 0 ]; then echo "Image exists ...\n" echo "$var|||$results^^^" >> doesExist.txt echo "$linecount | YES | $var " >> imgSearch.log else echo "Image does not exist ... \n" echo $var >> nonExists.txt echo "$linecount | NO | $var " >> imgSearch.log fi linecount=$((linecount-1)) done < ./imageserver.txt echo "\n\n -- FINISHED -- \n\n"
기본적으로 이미지가 /var/www/html
디렉토리의 HTML과 함께 사용되는지 확인하고 있습니다.
즉, 각 반복에는 grep
약 0.5~1초가 소요됩니다. 제 계산으로는 3~4일이 소요됩니다. 비록 예외적인 일이라고 생각하지만.. 이를 달성할 수 있는 더 나은(더 효율적인) 방법이 있나요?
답변1
스크립트의 성능은 문제가 되지 않습니다.
당신은 더듬고 있습니다각/var/www/html에서 검색하세요.250,000이류!
while 루프를 다음으로 바꿔야 합니다.
grep -rl -F -f ./imageserver.txt /var/www/html > grep_output
그런 다음 출력 파일을 구문 분석하여 통계를 얻습니다. 까다롭기는 하지만 4일은 걸리지 않습니다.
아니면 어쩌면 간단할지도
grep -Ff ./imageserver.txt -o grep_output | sort -u
사용된 이미지 목록을 가져옵니다. comm
imageserver.txt와 비교하여 이미지를 찾을 수 있습니다.아니요사용된.