我想在所有子文件夹(它被“调用”的地方)运行我编写的 bash 代码。我编写的代码简单地命名为“all”,当我在每个文件夹中单独运行它时,它运行没有问题。
但是当我用这段代码运行它时,它没有运行(它运行,但给出了错误,比如 - files not found)。
for D in *;do   
    all
done
我搞错了!!!我需要输入每个文件夹才能运行代码“all”。我怎么做?
谢谢!
您无需运行ls或find获取文件夹中的文件列表。对此有一个纯 bash 解决方案。您可以尝试以下方法:
for D in *; do
  [ -d "$D" -a -x "$D/all" ] && "$D/all"
done
即使目录包含空格,这也能很好地工作。在这种情况下lsandfind ...失败(如果目录是a bthenD将是athen b)。也find返回.目录。您可以使用find -maxdepth 1 -mindepth 1 -type d. 有find一个优点:它也能发现隐藏目录(.somedir)。使用bash可以强制使用.*,但是必须跳过.和dirs 。..
您可以使用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
    关于什么
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