'%EB%A5%BC%20%ED%8F%AC%ED%95%A8%ED%95%98%EC%A7%80%20%EC%95%8A%EB%8A%94%20%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC%20%EC%B0%BE%EA%B8%B0.png)
연도로 끝나지 않는 모든 비디오 디렉토리(파일 아님)를 나열하려고 합니다. 예를 들어 (2015)
더 구체적으로 말하면 연도가 나열되지 않으므로 닫는 괄호로 끝나지 않습니다 )
.
다음과 반대로 하려면 어떻게 해야 합니까?
# List all files and directories end with '(2015)'
ls -ld *\(2015\)
# List all files and directories end with ')'
ls -ld *\)
누구든지 이 작업을 수행하는 방법을 설명하는 데 도움을 줄 수 있습니까?
답변1
이 시도:
ls -ld *[^\)]
[] - 관심 있는 문자 집합
^ - 부정(원치 않는 문자 세트를 포함함)
\) - 탈출하다 ')'
답변2
Bash 또는 zsh에서:
for i in *; do [ -d "$i" ] && [[ ! "$i" =~ \)$ ]] && printf "%s\n" "$i"; done
이것은 단순히 현재 디렉토리의 모든 파일과 디렉토리를 반복하여 i) 디렉토리인지 (ii) 이름이 [ -d "$i" ])
(로 끝나지 않는지 확인합니다. 두 테스트를 모두 통과한 항목이 인쇄됩니다.)
[[ ! "$i" =~ \)$ ]]
이는 임의의 파일 이름을 처리할 수 있습니다(ls
할 수 없는 것).
답변3
방법 1a:
ls -ld -- *[^\)]
(경로 이름 확장(와일드카드/전역) 패턴 사용 : […]
, 또는 ; , 또는 를 제외한 모든 항목과 일치합니다 . 따라서 을 제외한 모든 항목과 일치합니다 .)[abc]
a
b
c
[^abc]
a
b
c
[^\)]
)
방법 2a:
GLOBIGNORE="*)"
ls -ld -- *
꽤 자명한가요?
두 방법 모두 디렉터리가 아닌 파일 및 기타 개체와 일치합니다.
디렉토리만 찾도록 don_crissti가 제안한 대로 업데이트되었습니다.
방법 1b:
ls -ld -- *[^\)]/
방법 2b:
GLOBIGNORE="*)/"
ls -ld -- */
/
값 에 를 포함 해야 합니다 GLOBIGNORE
.
답변4
POSIX적으로:
find . ! -name . -prune -type d ! -name '*)'
그리고 zsh
:
print -rl -- *[^\)](/)
Bourne과 같은 다른 쉘은 와일드카드 결과를 필터링할 수 없습니다. 당신은 그것을 사용할 수 있습니다 :
printf '%s\n' *[!\)]/
디렉토리에만 일치합니다. 그러나 확장된 결과에 후행 슬래시가 추가됩니다. 목차를 사용하면 foo
을 얻을 수 있습니다 foo/
.