首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在目录中的每个文件夹上运行命令?

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

Unix & Linux用户
提问于 2019-11-06 09:28:20
回答 2查看 1.5K关注 0票数 1

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

代码语言:javascript
复制
project/
├── folder1/
│   └── mainline
|       └── ...
├── folder2/
│   └── mainline
|       └── ...
├── folder3/
│   └── mainline
|       └── ...
.
.
.
└──folderN/
    └── mainline
        └── ...

我想在每个ant clean文件夹中运行一个命令,比如mainline。我该怎么做?

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2019-11-06 09:35:33

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

代码语言:javascript
复制
for mainline in project/folder*/mainline/; do
    ( cd "$mainline" && ant clean )
done

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

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

如果您显示的mainline目录是唯一这样的目录,那么您可以这样使用find

代码语言:javascript
复制
find project -type d -name mainline -execdir sh -c 'cd mainline && ant clean' \;

这将在mainline中或在project下找到任何名为ant clean的目录,然后在每个目录中执行D11-execdir操作是非标准的,但通常由find实用程序在大多数Unices上实现。

您还可以查找ant默认使用的D15文件,并在包含此类文件的每个mainline目录中执行ant clean

代码语言:javascript
复制
find project -type f -path '*/mainline/build.xml' -execdir ant clean \;
票数 4
EN

Unix & Linux用户

发布于 2019-11-06 09:33:39

这样做吧:

代码语言:javascript
复制
$ cd project/
$ find . -type d -name "mainline" -exec ls -l {} \;

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

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/550628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档