![cd는 모든 디렉터리에 들어가서 해당 디렉터리의 파일에 대해 명령을 실행하고 이전 현재 디렉터리로 돌아갑니다.](https://linux55.com/image/60062/cd%EB%8A%94%20%EB%AA%A8%EB%93%A0%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%EC%97%90%20%EB%93%A4%EC%96%B4%EA%B0%80%EC%84%9C%20%ED%95%B4%EB%8B%B9%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%EC%9D%98%20%ED%8C%8C%EC%9D%BC%EC%97%90%20%EB%8C%80%ED%95%B4%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%8B%A4%ED%96%89%ED%95%98%EA%B3%A0%20%EC%9D%B4%EC%A0%84%20%ED%98%84%EC%9E%AC%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%EB%A1%9C%20%EB%8F%8C%EC%95%84%EA%B0%91%EB%8B%88%EB%8B%A4..png)
단일 레벨 하위 디렉터리가 많은 특정 디렉터리에서 실행되는 스크립트를 작성하려고 합니다. 스크립트는 각 하위 디렉터리로 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
이것이 유용하길 바랍니다. 모든 순열과 조합을 시도해 볼 수 있습니다.
감사해요:)