2

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

但是当我用这段代码运行它时,它没有运行(它运行,但给出了错误,比如 - files not found)。

for D in *;do   
    all
done

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

谢谢!

4

3 回答 3

1

您无需运行lsfind获取文件夹中的文件列表。对此有一个纯 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)。使用可以强制使用.*,但是必须跳过.和dirs 。..

于 2013-06-04T08:12:11.693 回答
0

您可以使用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
于 2013-06-04T07:45:23.273 回答
-1

关于什么

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
于 2013-06-04T07:31:42.453 回答