Shell脚本nohup目录中的每个文件

时间:2013-02-21 21:21:18

标签: bash shell

这是对此处发布的问题的跟进Shell script to execute nohup against an inputed filename

我只是想找到修改下面的no_hup脚本来执行SQL脚本的整个目录而不是单个文件。所以我试图找到一种好方法来修改下面的脚本来执行整个文件目录:

  

如何编写shell脚本以便我可以针对名为test的目录运行,该目录包含文件foo1.sql,foo2.sql,foo3.sql

     

./ nohup_sh test

     

将产生输出

     

nohup psql -d db -f test / foo1.sql>& test / foo1.out&

     

nohup psql -d db -f test / foo2.sql>& test / foo2.out&

     

nohup psql -d db -f test / foo3.sql>& test / foo3.out&

这是我在上一个名为nohup_sh

的答案中使用的代码
#!/bin/bash

outputFile="$(echo $1 | cut -d\. -f 1).out"

nohup psql -d db -f "$1" >& "$outputFile" &

2 个答案:

答案 0 :(得分:5)

#!/bin/bash

for file; do
    nohup psql -d db -f "$file" >& "${file%.*}.out" &
done

${file%.*} bash parameter expansioncut的效果相同  命令,但bash builtin

for filefor file in "$@"

的简写

用法:

./script.bash sql_dir/*.sql

./script.bash *.sql

答案 1 :(得分:1)

以下脚本搜索作为参数传递的目录中的任何*.sql文件,并执行所需的nohup命令。找到的文件名以空字节分隔,以避免文件名中的空格或通配符出现问题。

#!/bin/bash
if [[ -d "$1" ]]; then
    find "$1/" -type f -name "*.sql" -print0 | while read -rd $'\0' file; do
        nohup psql -d db -f "$file" >& "${file%.*}.out" &
    done
else
    echo "$1 is no directory"
    exit 1
fi
exit 0

将其称为script.sh somedir