2009-09-03 7 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、SRV4由来find、または他のいくつかのPOSIX互換findを必要とする必要があります最も効率的ですが、すべてのfind実装で動作しない可能性があります(特に、BSD findがその機能を逃していると思います)。

0

< <は 'here document'ですが、ファイル名やストリームのように使用しています。

あなたは

検索をしたいような音。/usr/bin/mysql -D ootp ";/usr/bin/mysql -D ootp";/g '' {} '

あなたが-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 < {}" \; 
関連する問題