Shell脚本排序

时间:2020-06-02 09:42:00

标签: bash postgresql shell

我正在尝试编写一个在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

我需要添加一些条件。

  1. 我需要对文件夹的文件名进行排序。 例如,我的文件夹中包含文件a.sql,c.sql,b.sql

我想根据名称对它们进行排序,因此首先应插入a.sql,然后插入b.sql,然后插入c.sql。

  1. 对于folder1,存在一些不需要的文件,我想忽略它们(现在也正在发生),首先我要插入具有基本字段的文件,然后插入其他表。

示例folder1具有1.sql,a.txt,3.sql,base.sql。

我不想插入a.txt 然后首先插入base.sql,然后插入1.sql和3.sql

如何通过shell脚本做到这一点?

1 个答案:

答案 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。