AIX에서 쉘 스크립트를 사용하여 3개의 문자 하위 디렉토리를 모두 인쇄하십시오.

AIX에서 쉘 스크립트를 사용하여 3개의 문자 하위 디렉토리를 모두 인쇄하십시오.

/Test내 시스템에는 그 아래에 많은 디렉터리가 있는 디렉터리 가 있습니다 . AIX 시스템에서 3개의 문자 이름을 가진 모든 디렉토리를 인쇄하고 싶습니다.

Gnu/Linux용 코드를 얻었습니다.

find /test -maxdepth 1 -type d | awk -F / 'length($NF) == 3' |awk -F / '{print $3} ' 

이것은 AIX 서버입니다.

예: /test 디렉토리에는 하위 디렉토리가 포함되어 있습니다.

test1
AAA
BBB
Test2
test3

원하는 출력:

AAA
BBB

답변1

바라보다POSIX 조회를 특정 깊이로 제한하시겠습니까?findGNU 술어와 동등한 표준입니다 -maxdepth. 그래서 여기 있습니다:

(cd /Test && find . ! -name . -prune -type d -name '???') | sed 's|\./||'

또는 zsh설치된 경우:

zsh -c 'printf "%s\n" /Test/???(D/:t)'

답변2

간단한 쉘 루프 솔루션은 다음과 같습니다.

for pathname in Test/???/; do
    printf '%s\n' "$( basename "$pathname" )"
done

그러면 주어진 패턴과 일치하는 각 하위 디렉터리 이름(또는 하위 디렉터리에 대한 심볼릭 링크 이름)이 인쇄됩니다.

그 외에 다른 일을 하고 싶다면체크리스트이름을 지정하면 다음과 같은 작업을 수행할 수 있습니다.

for pathname in Test/???/; do
    # some code using "$pathname" here
done

즉, 당신은아니요먼저 목록을 생성한 다음 이를 반복합니다.

답변3

디렉토리로 재귀적으로 사용하고 싶지 않다면 간단한 와일드카드를 사용하세요.할 수 있다충분한. 기준은 입니다 ???/. 이는 "정확히 3개의 문자를 포함하는 디렉토리 이름과 일치함을 의미합니다. ksh의 기본 AIX 쉘에서는 마침표와 2개의 문자로 시작하는 "숨겨진" 디렉토리와 일치하도록 추가해야 합니다 .??/(마침표를 3개로 계산한다고 가정함) .???/. 마침표가 포함되지 않는 경우).

그 외에 유일한 "트릭"은 다음과 같습니다.

  • 하위 쉘을 사용하여 cd/test 디렉토리에 들어가십시오. 그렇지 않으면 선행 "/test" 문자열을 추가로 후처리해야 합니다.

  • 후행 슬래시를 사용하여 디렉터리(파일 대비)에서 와일드카드 일치를 강제하기 때문에 각 줄에서 후행 슬래시를 제거하는 /데 사용합니다 .sed

그런 다음 한 줄은 다음과 같습니다.

(cd /test; printf '%s\n' ???/ .??/) | sed 's!/$!!'

예시 설정은 다음과 같습니다.

mkdir /test
mkdir /test/AAA /test/BBB /test/.AB
touch /test/aaa

샘플 결과는 다음과 같습니다.

AAA
BBB
.AB

관련 정보