2010-07-12 3 views
0

문제 설명을 사용하여 몇 가지 분석을 수행 : 내가 쉘을 만들고 싶어 "File_names" 라는 데이터베이스에 테이블에 저장된 파일의 집합이 파일 이름과 디렉토리가루프와 쉘 스크립트를

을 스크립트는 디렉토리에서 반복되며 매번 파일 이름이 데이터베이스에 존재하는지 검색 할 때마다 검색하고, 그렇지 않으면 데이터베이스에 해당 이름을 삽입합니다. 그렇지 않으면 아무것도하지 않습니다.

내 흔적 :

FILES=/path/* 
for f in $FILES 
do 
echo $f 
done 

그러나 $ 여기서 f는 난 단지처럼 smthing 할 이름을 수 할 경로 + 이름을 포함합니다 :

count = " select count(*) from File_names where name = $f" 

내가 어떻게 할 수 있습니까?

미리 감사드립니다.

+0

그리고 DB는 오라클, SQL 서버 ...? –

답변

2

질문이 명확하지 않습니다. 내가 이해할 때 나는 그것의 껍질 부분에 대답 할 것이다.

필자가 이해하는 한, 디렉토리의 각 파일에 대해 명령을 실행하려고합니다. 그러나 파일의 기본 이름에만 관심이 있습니다 (예 : 디렉토리 부분 없음).

  • 대한 대안 cd 명령이 실패하면, 스크립트가 중지되도록 2

    set -e 
    cd /path 
    for f in *; do 
        echo "$f" 
    done 
    

    set -e는 1

    for f in /path/*; do 
        echo "$(basename "$f")" 
    done 
    
  • 대안. 일반적으로 set -e으로 쉘 스크립트를 시작하는 것이 좋습니다.

파일 이름에 구두점 또는 공백이 포함될 경우 따옴표를 붙이십시오. 이것은 셸 부분과 SQL 부분 모두에 적용됩니다. 질문에서 쿼리를 작성하는 방법은 SQL injection으로 완전히 열립니다 (누군가가 foo; DROP TABLE File_names이라는 파일을 만든 경우 어떻게 될지 생각하십시오).

관련 문제