Bash for 循环,使用 grep

Bash for 循环,使用 grep

我有一个充满压缩文件的文件夹,我希望将这些文件通过管道传输到第二个 bash 脚本,其中包含使用 for 循环在其上运行程序的命令。到目前为止我有:

targ_path='/scratch/mine/allfiles/targetfiles/'
mybashpath='/scratch/mine/secondbash.sh'
cd $targ_path                                               
ls | grep \.gz | $mybashpath {}

但我知道这是错误的,我需要使用 for 循环将管道文件发送到我的第二个 bash 脚本。

我对 bash 很陌生,非常感谢这里的一些帮助。

答案1

假设您的意图是将目录更改为$targ_path,然后使用$mybashpath名称以.gz该目录结尾的每个文件作为参数调用一次脚本。

#!/bin/bash

shopt -s nullglob

targ_path=/scratch/mine/allfiles/targetfiles
mybashpath=/scratch/mine/secondbash.sh

cd "$targ_path" || exit

for name in ./*.gz; do
   "$mybashpath" "$name"
done

这会将目录更改为$targ_path,但如果失败则退出。

./*.gz然后,它对与通配模式匹配的名称(即当前目录中以 . 结尾的每个名称)进行循环迭代.gz。它使用这些名称作为$mybashpath脚本的参数,为每个名称调用一次脚本。

我还在nullglob脚本顶部设置了 shell 选项,以便在通配模式与任何内容都不匹配时停止循环运行一次。

根据$mybashpath脚本使用参数的方式,cd可能不需要:

#!/bin/bash

shopt -s nullglob

targ_path=/scratch/mine/allfiles/targetfiles
mybashpath=/scratch/mine/secondbash.sh

for name in "$targ_path"/*.gz; do
   "$mybashpath" "$name"
done

相关内容