일부 디렉터리와 일부 파일(일부는 숨겨져 있고 점으로 시작함)이 포함된 폴더가 있습니다.
for d in *; do
echo $d
done
모든 파일과 디렉토리를 반복하지만 저는 디렉토리만 반복하고 싶습니다. 어떻게 해야 하나요?
답변1
디렉터리에만 일치하도록 후행 슬래시를 지정할 수 있습니다.
for d in */ ; do
echo "$d"
done
심볼릭 링크를 제외하려면 continue
루프를 사용하여 현재 항목이 링크인지 테스트하세요. -L
심볼릭 링크로 인식 하려면 이름에서 후행 슬래시를 제거해야 합니다 .
for d in */ ; do
[ -L "${d%/}" ] && continue
echo "$d"
done
답변2
다음을 사용하여 이를 테스트할 수 있습니다 -d
.
for f in *; do
if [ -d "$f" ]; then
# $f is a directory
fi
done
이게 그 중 하나야파일 테스트 연산자.
답변3
choroba의 솔루션은 훌륭하기는 하지만 현재 디렉터리에 사용 가능한 디렉터리가 없으면 예기치 않은 동작이 발생할 수 있습니다. 이 상태에서 bash는 for
루프를 건너뛰지 않고 한 번만 실행합니다. 여기서는 d
다음과 같습니다 */
.
#!/usr/bin/env bash
for d in */; do
# Will print */ if no directories are available
echo "$d"
done
이를 방지하려면 다음 방법을 사용하는 것이 좋습니다.
#!/usr/bin/env bash
for f in *; do
if [ -d "$f" ]; then
# Will not run if no directories are available
echo "$f"
fi
done
이 코드는 현재 디렉터리의 모든 파일을 반복하여 f
디렉터리인지 확인 f
하고 조건이 true를 반환하면 에코합니다. 같으면 f
실행 하지 않습니다 */
.echo "$f"
답변4
순수 bash를 사용하여 이를 달성할 수 있지만 find를 사용하는 것이 더 좋습니다.
find . -maxdepth 1 -type d -exec echo {} \;
(추가로 검색에는 숨겨진 디렉터리도 포함됩니다)