1

我一辈子都得不到这个。失败的例子,最后一行加上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' {}

是什么赋予了?

4

3 回答 3

2

我会将以上所有内容重写为以下变体之一:

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

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

查找 -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-derivedfind或其他一些与 POSIX 兼容的版本find,并且应该是最有效的,但可能不适用于所有find实现(值得注意的是,我认为 BSDfind缺少该功能)。

于 2009-09-03T21:39:28.560 回答
0

<< 是“此处文档”,但您正在使用它,因为它是文件名和/或流。

听起来像你想要的

寻找 。-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
于 2009-09-03T21:45:43.647 回答
0

我试过这样的东西,它对我有用:

find -maxdepth 1 -name "*.sql" -exec sh -c "mysql -D ootp < {}" \;
于 2017-11-23T01:29:26.687 回答