我有一个充满压缩文件的文件夹,我希望将这些文件通过管道传输到第二个 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