【问题标题】:BASH Simple - Run for all foldersBASH Simple - 为所有文件夹运行
【发布时间】:2013-06-04 07:29:15
【问题描述】:

我想在所有子文件夹(被“调用”)中运行我编写的 bash 代码。 我写的代码简单地命名为“all”,当我在每个文件夹中单独运行时,它运行没有问题。

但是当我用这段代码运行它时,它没有运行(它运行,但给出了诸如 - 找不到文件之类的错误)。

for D in *;do   
    all
done

我错了!!!我需要输入每个文件夹才能运行代码“all”。我该怎么做?

谢谢!

【问题讨论】:

  • 我已经让代码可执行了。
  • "all" 是 bash 函数,应该有参数 $D?还是文件夹里的代码?

标签: bash directory


【解决方案1】:

您无需运行lsfind 即可获取文件夹中的文件列表。对此有一个纯 bash 解决方案。您可以尝试以下方法:

for D in *; do
  [ -d "$D" -a -x "$D/all" ] && "$D/all"
done

即使目录包含空格,这也能正常工作。在这种情况下lsfind ... 会失败(如果目录是a b,那么D 将是a,然后是b)。 find 也返回 . 目录。您可以使用find -maxdepth 1 -mindepth 1 -type d 避免这种情况。 find 有一个优势:它也能发现隐藏目录 (.somedir)。对于,可以使用.* 强制执行此操作,但随后必须跳过... 目录。

【讨论】:

    【解决方案2】:

    您可以使用find

    for D in `find . -type d`; do
       "$D"/all
    done
    

    这将递归地找到每个子文件夹!并且不会遵循符号链接(这是 find 的默认行为)

    可以通过参数maaaxdepth指定最大递归深度

    for D in `find . -type d -maxdepth 1`; do
       "$D"/all
    done
    

    这只会占用当前密码中的子文件夹

    未来的我编辑:不要使用它!

    更好的方法:通配符

    for i in * 
    do 
      [[ -d $i ]] && ./"$i"/all
    done
    

    【讨论】:

    • 这也将返回 . 目录。可使用-mindepth 1 更正。如果目录包含空间,则效果不佳。
    【解决方案3】:

    怎么样

    for D in `ls`; do
        $D/all
    done
    

    编辑:

    如果需要进入每个文件夹:

    for D in `ls`; do
        cd $D
        ./all
        cd ..
    done
    

    编辑(仅限空格+目录):

    for D in `ls -d`; do
        cd "$D"
        ./all
        cd ..
    done
    

    【讨论】:

    • 我搞错了!!!我需要输入每个文件夹才能运行代码“all”。我该怎么做?
    • 它给了我类似的东西:21a/all:没有这样的文件或目录。 - 对于所有文件夹 21a 是另一个正确的文件夹,但这样它会查找文件夹 "21a/all" ,同时它应该打开目录并运行 "all"
    • 其实没有。尝试传递一个名称中包含空格的子文件夹。还有ls返回文件,你至少应该测试它不要做cd file
    • 是的,你是对的。您帮助我找到了解决方案,但我一直使用“*”,因此完美运行的最终代码是:`for D in *;do cd $D all cd .. done´ 感谢您一直以来的帮助。我很感激。可悲的是,我还没有足够的声誉来为您的回答“投票”...
    • 这不是一个合适的解决方案!它将报告很多错误,例如bash: cd: myprogram.sh: Not a directoryls -d 只返回一个 . 目录。 ls -d * 效果更好,但是空间问题没有处理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 2014-01-22
    相关资源
    最近更新 更多