![在目录中嵌套 for 循环](https://linux22.com/image/144666/%E5%9C%A8%E7%9B%AE%E5%BD%95%E4%B8%AD%E5%B5%8C%E5%A5%97%20for%20%E5%BE%AA%E7%8E%AF.png)
我有两组文件,组织如下:
#first directory
/direc1/files
file0.1.tar.gz
file0.2.tar.gz
file0.3.tar.gz
file0.4.tar.gz
.
.
.
file0.22.tar.gz
在这个目录中,我总共有242个文件。我当前运行 script.py 的嵌套命令如下:
for z in `seq 0 10`; do
for i in `seq 1 22`; do python script.py --l2 --ld-wind-cm 1 --annot file${z}.${i} --thin-annot --out file${z}.${i} --print-snps;done;done
如果你注意到的话,我已经file
在这个循环中进行了硬编码。有没有一种方法可以在不file${z}.${i}
使用变量的情况下运行它?
答案1
你的要求不太清楚。为什么两个循环跨越两个范围?不会
for FN in *.tar.gz; do echo python script.py --out "$FN"; done
足够了吗?echo
如果对结果满意,请删除。
如果除了您想要处理的文件之外没有其他文件,“扩展名”也可能消失,for
在*
.
答案2
如果除了您需要的文件之外还有其他 tar.gz 文件,您可以使用:
for i in file{0..10}.{1..22}.tar.gz; do python script.py --out "$i" --print-file; done
如果这些是文件夹中唯一的文件,那么这就足够了,并且适用于任何文件名。
for i in * ; do python script.py --out "$i" --print-file; done
如果这些是文件夹中唯一的 tar.gz 文件,但那里还有一些其他类型的文件,那么可以使用它,并且可以使用任何名称的 tar.gz 文件:
for i in *.tar.gz ; do python script.py --out "$i" --print-file; done