如何对目录中的每个文件夹运行命令?

如何对目录中的每个文件夹运行命令?

假设我有一个如下结构的目录:

project/
├── folder1/
│   └── mainline
|       └── ...
├── folder2/
│   └── mainline
|       └── ...
├── folder3/
│   └── mainline
|       └── ...
.
.
.
└──folderN/
    └── mainline
        └── ...

我想ant clean在每个mainline文件夹中运行一个命令。我怎样才能做到这一点?

答案1

假设您希望在显示的目录层次结构中的ant clean每个目录中运行:mainline

for mainline in project/folder*/mainline/; do
    ( cd "$mainline" && ant clean )
done

这将循环每个mainline目录的路径名。对于每个这样的路径名,循环体都会更改为该目录并ant clean在其中运行。

循环中命令周围的括号在子 shell 中运行这些命令。工作目录的更改是该子 shell 的本地更改(我们不必“退出”我们cd进入的目录)。


如果mainline您显示的目录是仅有的这样的目录,那么你可以find像这样使用:

find project -type d -name mainline -execdir sh -c 'cd mainline && ant clean' \;

这会发现任何mainline在 或之下调用的目录project,然后ant clean在每个目录中执行。该-execdir操作是非标准的,但通常由find大多数 Unices 上的实用程序实施。

您还可以查找默认使用的build.xml文件并在包含此类文件的每个目录中执行:antant cleanmainline

find project -type f -path '*/mainline/build.xml' -execdir ant clean \;

答案2

像这样做:

$ cd project/
$ find . -type d -name "mainline" -exec ls -l {} \;

这将在当前文件夹(project/)中找到名为“mainline”的目录并ls -l在每个目录上执行

相关内容