我正在尝试编写一个在postgres中插入数据的shell脚本:
第一部分:
#!/usr/bin/env bash
for f in /folder/*.sql; do
psql -U postgres -f $f
done
for f in /folder1/*.sql; do
psql -U postgres -f $f
done
我需要添加一些条件。
我想根据名称对它们进行排序,因此首先应插入a.sql,然后插入b.sql,然后插入c.sql。
示例folder1具有1.sql,a.txt,3.sql,base.sql。
我不想插入a.txt 然后首先插入base.sql,然后插入1.sql和3.sql
如何通过shell脚本做到这一点?
答案 0 :(得分:1)
星号通配符会扩展到排序列表,因此您可以使用一个循环:
for f in /folder/*.sql /folder1/base.sql /folder1/?.sql; do
psql -U postgres -f $f
done
不过,列表是按字母顺序排序的,并取决于语言环境。
问号仅匹配一个字符,因此?.sql
将同时匹配1.sql和3.sql。您也可以使用[0-9]*.sql
来匹配名称以数字开头的文件。在扩展glob(shopt -s extglob
)下,您甚至可以说+([0-9]).sql
,因此它也可以匹配多于一个数字的文件(例如124.sql)。请注意,按字母顺序,10 <2。