BASH Simple-对所有文件夹运行
我想在所有子文件夹(在其中被“调用”)中运行我编写的bash代码。 我写的代码只是简单地命名为“all”,当我在每个文件夹中单独运行它时,它运行起来没有问题 但当我用这段代码运行它时,它不会运行(它运行,但会出现错误,如-files not found)BASH Simple-对所有文件夹运行,bash,directory,Bash,Directory,我想在所有子文件夹(在其中被“调用”)中运行我编写的bash代码。 我写的代码只是简单地命名为“all”,当我在每个文件夹中单独运行它时,它运行起来没有问题 但当我用这段代码运行它时,它不会运行(它运行,但会出现错误,如-files not found) 我搞错了!!!我需要输入每个文件夹才能运行代码“all”。我该怎么做 谢谢 怎么样 for D in `ls`; do $D/all done 编辑: 如果需要输入每个文件夹: for D in `ls`; do cd $D
我搞错了!!!我需要输入每个文件夹才能运行代码“all”。我该怎么做 谢谢 怎么样
for D in `ls`; do
$D/all
done
编辑:
如果需要输入每个文件夹:
for D in `ls`; do
cd $D
./all
cd ..
done
编辑(仅限空格+目录):
您可以使用
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
这将仅获取当前pwd中的子文件夹
编辑未来我:不要用那个
更好的方法:环球旅行
for i in *
do
[[ -d $i ]] && ./"$i"/all
done
您不需要运行
ls
或find
来获取文件夹中的文件列表。对于这一点,有一个纯粹的bash解决方案。您可以尝试以下方法:
for D in *; do
[ -d "$D" -a -x "$D/all" ] && "$D/all"
done
即使目录中包含空格,这也可以很好地工作。在这种情况下,
ls
和find…
将失败(如果目录是ab
,那么D
将是a
,然后是b
)。此外,find
还返回
dir。使用find-maxdepth 1-mindepth 1-typed
可以避免这种情况。find
有一个优点:它还可以发现隐藏的目录(.somedir
)。可以使用*
强制执行此操作,但必须跳过
和。
目录。我已经使代码可执行。“all”是bash函数,应该有参数$D?或者是文件夹里的代码?我搞错了!!!我需要输入每个文件夹才能运行代码“all”。我该怎么做?它会给我这样的信息:21a/all:没有这样的文件或目录。-对于所有文件夹,21a与其他文件夹一样是正确的文件夹,但通过这种方式,它会查找文件夹“21a/all”,而它应该打开目录并运行“all”实际上不会。尝试传递名称中包含空格的子文件夹。另外ls
返回文件,您至少应该测试它不执行cd文件
是的,您是对的。您帮助我找到了解决方案,但我一直在使用“*”,因此最终运行完美的代码是:`ford in*;做cd$D所有cd。。谢谢你不断的帮助。我很感激。可悲的是,我还没有足够的声誉来“投票赞成”你的答案……这不是一个合适的解决方案!它将报告许多错误,例如bash:cd:myprogram.sh:不是目录
ls-d
只返回一个
目录ls-d*
工作得更好,但空间问题没有得到处理。这将返回
dir。可使用-mindepth 1
进行更正。如果dir中包含空格,则效果不好。
for i in *
do
[[ -d $i ]] && ./"$i"/all
done
for D in *; do
[ -d "$D" -a -x "$D/all" ] && "$D/all"
done