我想在所有子文件夹(它被“调用”的地方)运行我编写的 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
即使目录包含空格,这也能很好地工作。在这种情况下ls
andfind ...
失败(如果目录是a b
thenD
将是a
then 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