모든 하위 폴더에서 명령을 실행하는 방법

모든 하위 폴더에서 명령을 실행하는 방법

일련의 하위 폴더(예: a~ z)가 있고 각 하위 폴더(예 dsmmigrate * &: )에서 명령을 실행하려는 경우 어떻게 합니까? 수동방식은,

cd a 
dsmmigrate * &
cd ../b

이것은 너무 복잡해 보이기 때문에 더 쉬운 방법이 있을 것이라고 확신합니다.

답변1

예, 작업 디렉터리를 앞뒤로 변경하는 것은 번거롭고 실제로 하고 싶은 일이 아닙니다. 주의하지 않는 한 더 복잡한 스크립트에서 극도로 이상한 상황이 발생할 수 있기 때문입니다.

간단한 명령의 작업 디렉터리를 변경하는 일반적인 방법은 cd명령과 호출을 하위 쉘에 배치하는 것입니다. 하위 쉘의 작업 디렉토리는 변경되지만 하위 쉘은 자체 환경에서 실행되기 때문에 변경 사항이 스크립트의 나머지 부분으로 전달되지 않습니다.

예: mycommand현재 작업 디렉터리의 모든 디렉터리에서 실행:

for d in *; do
  if [ -d "$d" ]; then         # or:  if test -d "$d"; then
    ( cd "$d" && mycommand )
  fi
done

또는 귀하의 경우 알려진 디렉토리를 사용 a하고 다음을 수행하십시오 b.

for d in a b; do
  ( cd "$d" && dsmmigrate * & )
done

제가 툴을 잘 몰라서 dsmmigrate이렇게 실행하는 것이 맞는지는 모르겠습니다.

편집하다:그것은 밝혀졌다dsmmigrate도구플래그 가 있습니다 -Recursive:

$ dsmmigrate -Recursive /path

답변2

현재 디렉터리가 parent_directory:이면 다음 작업을 수행할 수 있습니다.

for d in [a-z]
do
    ( cd $d && your-command-here )
done

메인 스크립트의 현재 디렉토리가 변경되지 않도록 하위 쉘을 (생성합니다 .)

답변3

하위 폴더에 여러 작업을 제출하는 방법은 다음과 같습니다.

for d in */; do ( cd "$d" && yourcommand ) ; done   

관련 정보