我不能为我的生活得到这个。失败的例子,最后一行在sed中添加,这是最终目标:
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' {}
是什么给出了?
答案 0 :(得分: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
并且应该是最有效的,但可能不适用于所有{{1}实现(特别是,我相信BSD find
错过了这个功能)。
答案 1 :(得分:0)
&LT;&LT;是'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
答案 2 :(得分:0)
我尝试过这样的事情并且对我有用:
find -maxdepth 1 -name "*.sql" -exec sh -c "mysql -D ootp < {}" \;