/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 조회를 특정 깊이로 제한하시겠습니까?find
GNU 술어와 동등한 표준입니다 -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