cd는 모든 디렉터리에 들어가서 해당 디렉터리의 파일에 대해 명령을 실행하고 이전 현재 디렉터리로 돌아갑니다.

cd는 모든 디렉터리에 들어가서 해당 디렉터리의 파일에 대해 명령을 실행하고 이전 현재 디렉터리로 돌아갑니다.

단일 레벨 하위 디렉터리가 많은 특정 디렉터리에서 실행되는 스크립트를 작성하려고 합니다. 스크립트는 각 하위 디렉터리로 CD를 이동하고 디렉터리의 파일에 대해 명령을 실행한 다음 CD를 통해 다음 디렉터리로 계속 이동합니다. 이를 수행하는 가장 좋은 방법은 무엇입니까?

답변1

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

답변2

cd가장 좋은 방법은 전혀 사용하지 않는 것입니다.

find some/dir -type f -execdir somecommand {} \;

execdir유사 exec하지만 작업 디렉토리가 다릅니다.

-execdir command {} [;|+]
  Like   -exec,   but  the  specified  command  is  run  from  the
  subdirectory containing the matched file, which is not  normally
  the  directory  in  which  you  started  find.  This a much more
  secure  method  for  invoking  commands,  as  it   avoids   race
  conditions  during resolution of the paths to the matched files.

POSIX가 아닙니다.

답변3

for D in ./*; do
    if [ -d "$D" ]; then
        cd "$D"
        run_something
        cd ..
    fi
done

답변4

방법 1:

for i in `ls -d ./*/`
do
  cd "$i"
  command
  cd ..
done

방법 2:

for i in ./*/
do
  cd "$i"
  command
  cd..
done

방법 3:

for i in `ls -d ./*/`
do
  (cd "$i" && command)
done

이것이 유용하길 바랍니다. 모든 순열과 조합을 시도해 볼 수 있습니다.

감사해요:)

관련 정보