Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
BASH Simple-对所有文件夹运行_Bash_Directory - Fatal编程技术网

BASH Simple-对所有文件夹运行

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

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

但当我用这段代码运行它时,它不会运行(它运行,但会出现错误,如-files not found)


我搞错了!!!我需要输入每个文件夹才能运行代码“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