라는 디렉토리가 있고 /tmp/main
그 안에 100개의 다른 디렉토리가 있다고 가정해 보겠습니다.
예를 들어 다음을 사용하여 이러한 각 디렉토리를 반복하고 싶습니다.touch test.txt
첫 번째, 두 번째, 세 번째 등을 처리하도록 스크립트에 어떻게 지시합니까?
답변1
간단한 루프가 작동합니다.
for dir in /tmp/main/*/; do
touch "$dir"/test.txt
done
/
패턴 끝의 보장은 /tmp/main/*/
패턴이 무엇이든 일치하면 디렉터리와 일치한다는 것입니다.
에서는 패턴이 일치하지 않는 경우 루프가 전혀 실행되지 않도록 bash
루프 전에 nullglob
셸 옵션을 설정해야 할 수도 있습니다. 설정 shopt -s nullglob
하지 않으면 nullglob
루프는 한 번만 실행되고 패턴은 에서 확장되지 않습니다 $dir
. 이 문제를 해결하는 또 다른 방법은 다음을 호출하기 전에 $dir
실제로 디렉터리인지 확인하는 것입니다 touch
.
for dir in /tmp/main/*/; do
if [ -d "$dir" ]; then
touch "$dir"/test.txt
fi
done
또는 동등하게,
for dir in /tmp/main/*/; do
[ -d "$dir" ] && touch "$dir"/test.txt
done
답변2
당신은 그것을 사용할 수 있습니다 find
:
find /tmp/main -type d -exec touch {}/test.txt \;
/tmp/main
다음을 사용하여 결과에서 이 폴더를 제외하려면 다음을 사용하세요 find
.
find /tmp/main ! -path /tmp/main -type d -exec touch {}/test.txt \;
또는
find /tmp/main -mindepth 1 -type d -exec touch {}/test.txt \;