【问题标题】:Iterate a function through every subfolder遍历每个子文件夹的函数
【发布时间】:2021-12-02 05:22:50
【问题描述】:

我有一个函数,它接受一个文件,执行一些操作,然后创建一堆输出文件。 我有 100 个子文件夹,名为:

d066, d067, d068.... d165, d166

他们每个人只有一个文件。我要做的是进入每个子文件夹,获取文件名,对其应用函数,离开子文件夹,进入下一个,依此类推。

我写了这个脚本:

for i in {60..166}; do
    
    if [ $i -lt 100 ];
    then 
        var2=d0$i
    else
        var2=d$i
    fi             
    cd $var2 || exit             
    f=$(find . -type f)   
    gd2e.py -rnxFile $f   
    cd ..                
    
done

问题是我的代码离开了包含子文件夹的文件夹,然后停止了。有谁知道更好的方法吗?

【问题讨论】:

  • 请添加合适的 shebang (#!/bin/bash),然后将您的脚本粘贴到 shellcheck.net 并尝试实施那里提出的建议。
  • 到目前为止,我犯的拼写错误似乎是导致它无法正常工作的原因。感谢@markp-fuso 提供了更快的方法!它也很好用。我想选择您的评论作为答案,但由于您只发表了评论,我无法接受它

标签: bash loops unix syntax subdirectory


【解决方案1】:

假设函数可以与作为输入参数一部分的目录一起使用(例如,gd2e.py -rnxFile ${i}/${f}),简化当前代码的一些想法:

while read -r f
do
    gd2e.py -rnxfFile "${f}"
done < <(find d{060..166} -type f)

如果d{060..166} 目录可以包含您不想扫描的子目录,我们可以将-maxdepth 1 添加到find

while read -r f
do
    gd2e.py -rnxfFile "${f}"
done < <(find d{060..166} -maxdepth 1 -type f)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-08
    • 1970-01-01
    • 1970-01-01
    • 2016-02-12
    • 2017-02-08
    • 2023-01-20
    • 2022-11-26
    • 1970-01-01
    相关资源
    最近更新 更多