假设我有一个如下结构的目录:
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
文件并在包含此类文件的每个目录中执行:ant
ant clean
mainline
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
在每个目录上执行