각 하위 폴더를 반복하고 폴더를 확인하고 스크립트를 실행합니다.

각 하위 폴더를 반복하고 폴더를 확인하고 스크립트를 실행합니다.

다양한 깊이의 하위 폴더가 있는 디렉토리가 있습니다. 모든 항목을 반복하여 특정 이름의 폴더가 포함되어 있는지 확인하고 해당 디렉터리가 존재하면 스크립트를 실행하고 싶습니다( foo.sh혼란을 피하기 위해 이 스크립트를 호출하겠습니다 ).

foo.sh대상 폴더가 발견되면 현재 폴더에서 실행되어야 합니다. 예:

/A
  /subA-1
  /subA-2
    /target
  /subA-3
    /sub-subA-3
       /target

내가 찾고 있는 명령/스크립트는 에서 실행되어야 하며 /A그런 다음 이름이 지정된 폴더를 찾는 모든 하위 폴더를 반복합니다 target. 일단 입력되면 /subA-2이 조건이 충족되고 /subA-2foo.sh 가 실행됩니다. 동일 /sub-subA-3하지만 그렇지 않습니다 /subA-3.

foo.sh입력이 필요하지 않으며 포함만 하면 됩니다 /target.

답변1

그것은 간단합니다:

find A -type d -name target -execdir foo.sh \;

매뉴얼 페이지에서:

-execdir 명령;

-exec와 비슷하지만 지정된 명령은 일치하는 파일이 포함된 하위 디렉터리에서 실행됩니다.

예:

문제에 따라 디렉터리 구조를 만들고 인쇄합니다.

/tmp$ mkdir A; cd A
/tmp/A$ mkdir -p subA-1 subA-2/target subA-3/sub-subA-3/target
/tmp/A$ find .
.
./subA-2
./subA-2/target
./subA-3
./subA-3/sub-subA-3
./subA-3/sub-subA-3/target
./subA-1

이제 명령을 실행하여 무슨 일이 일어나는지 pwd보여 줍니다 foo.sh.

/tmp/A$ find . -type d -name target -execdir pwd \;
/tmp/A/subA-2
/tmp/A/subA-3/sub-subA-3

답변2

zsh 사용:

cd /A && for dir (**/target(/N:h) (cd -- $dir && foo.sh)

답변3

가장 쉬운 방법은 모든 디렉터리 찾기를 사용한 find다음 스크립트를 수정하여 foobar올바른 이름의 디렉터리가 있는지 확인하는 것입니다(예:).

#!/bin/bash

targetDir="$@"   ## The directory to run the script on
dirName="target" ## Change this to whatever the "target" is
cd "$trargetDir"
## Exit if the $targetDir doesn't have a directory with 
## the name you're looking for
[ -d "$targetDir"/"$dirName" ] || exit

## If it does, cd into the $targetDir and continue the script
cd "$targetDir"

### The rest of the script goes here
...

이제 명령을 실행 find하고 발견된 모든 디렉터리에서 스크립트를 실행하도록 할 수 있습니다.

find /target -type d -exec /path/to/script.sh "{}" \; 

모든 작업을 수행할 수도 있지만 find개인적으로 위의 솔루션이 더 깨끗하다고 ​​생각합니다. 그러나 그것은 당신에게 달려 있습니다. 한 가지 방법은 다음과 같습니다.

pwd="$PWD"; find . -type d -name foobar -printf '%h\0' | 
    while IFS= read -d '' dir; do cd "$dir" && foo.sh; cd "$pwd"; done

답변4

찾기 명령을 사용하십시오.

사람들이 발견했습니다몇 가지 예가 있습니다.

find /tmp -name core -type f -print | xargs /bin/rm -f

find . -type f -exec file '{}' \;

관련 정보