
다음과 같은 구조의 디렉터리가 있다고 가정해 보겠습니다.
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
그 디렉터리에서 실행됩니다.
루프 내 명령 주위의 괄호는 하위 쉘의 명령을 실행합니다. 작업 디렉토리에 대한 변경 사항은 해당 하위 쉘에 대해 로컬입니다( 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
각 디렉터리에서 실행합니다.