2009-09-03 2 views
1

나는 내 인생을 감당할 수 없다. 무엇 제공-find -exec를 통해 mysql으로 SQL을 파이핑

find -maxdepth 1 -name "*.sql" -exec "mysql -D ootp < {}" \; 
find -maxdepth 1 -name "*.sql" -exec "mysql -D ootp << {}" \; 
find . -maxdepth 1 -name \"*.sql\" -exec /usr/bin/mysql -D ootp << sed -e 's/ ,);/1,1);/g' {} 

: 예는, 궁극적 인 목표 인 SED에 추가하는의 마지막 줄에 실패? 나는이 변종 중 하나에 위의 내용을 모두 다시 것

+0

나는 당신의 질문을 이해하지 않습니다 :( – exhuma

답변

2

:

 
find -maxdepth 1 -name '*.sql' -exec sed -e 's/ ,);/1,1);/g' '{}' +  \ 
    | mysql -D ootp 

find -maxdepth 1 -name '*.sql' -print0 \;        \ 
    | xargs -0 sed -e 's/ ,);/1,1);/g'         \ 
    | mysql -D ootp 

find -maxdepth 1 -name '*.sql' -exec cat '{}' \;       \ 
    | sed -e 's/ ,);/1,1);/g'           \ 
    | mysql -D ootp 

find -maxdepth 1 -name '*.sql' -exec sed -e 's/ ,);/1,1);/g' '{}' \; \ 
    | mysql -D ootp 

첫 번째 변형은 GNU의 findutils의 4.2.12을 필요는 find을 SRV4는 유래, 또는 일부 다른 POSIX 호환 find되어야한다 가장 효율적이지만 모든 find 구현에서 작동하지 않을 수 있습니다 (특히 BSD find이 해당 기능을 놓친다 고 생각합니다).

0

< <은 'here document'이지만 파일 이름 및/또는 스트림이므로 그대로 사용하고 있습니다.

같은 소리

찾으세요. -maxdepth 1 -name '* .sql'-exec "sed -e 's /,)/1,1);/g"{}'|/usr/bin/mysql -D ootp ";

하면 -maxdepth 1 아마도 당신은 그냥 이런 식으로 뭔가를 시도하고 나를 위해 일한

for i in *.sql ; do 
    sed -e 's/ ,);/1,1);/g' "$i" | /usr/bin/mysql -D ootp 
done 
0

할 수있는 사용하는 경우 :

find -maxdepth 1 -name "*.sql" -exec sh -c "mysql -D ootp < {}" \; 
관련 문제