폴더가 있습니다 A
. 이 폴더 안에는 일부 파일이 있고 해당 파일을 포함하는 a,b,c,d
하위 폴더가 있습니다 .B
e,f,g
파일을 열고 싶다고 가정해 보겠습니다 . a,b,c,d
그런 다음 . xdg-open *
그러나 이것은 또한 하위 폴더로 이동하여 B
열립니다 e,f,g
. 그것을 여는 가장 쉬운 방법은 무엇입니까 a,b,c,d
?
편집: 내가 정말로 의미하는 것은 하위 폴더에 포함된 파일이 아니라 폴더의 모든 파일을 여는 방법입니다.
답변1
어때요?find A -maxdepth 1 -type f -exec xdg-open {} \;
이렇게 하면 최상위 수준을 벗어나지 않고 폴더 A의 모든 파일이 열립니다.
답변2
방법 #1 - 셸 확장
찾고 있는 항목의 이름이 순차적으로 지정되어 있다는 것을 알고 있으면 여러 가지 방법으로 셸 확장을 사용할 수 있습니다.
예
$ xdg-open [a-d]
$ xdg-open {a..d}
$ xdg-open a* b*
방법 #2 - 확장된 와일드카드
Bash(버전 3.2+)에서는 확장된 와일드카드를 사용하여 특정 사항을 제외한 모든 것을 포함할 수 있습니다. 저는 이것이 여러분이 요구하는 것이라고 생각합니다.
예
$ xdg-open !(B)
$ xdg-open !(A|B)
데모
echo
확장된 파일 및/또는 디렉터리 목록에 대해 실제로 명령을 실행하지 않고도 globstar 또는 확장된 globbing의 결과를 볼 수 있도록 이 기능을 자주 사용할 것입니다 .
예
예를 들어 다음과 같은 파일 디렉터리가 있습니다.
$ ls -l
total 8
-rw-rw-r-- 1 saml saml 0 Nov 15 20:12 a
drwxrwxr-x 2 saml saml 4096 Nov 15 20:23 A
-rw-rw-r-- 1 saml saml 0 Nov 15 20:12 b
drwxrwxr-x 2 saml saml 4096 Nov 15 20:12 B
-rw-rw-r-- 1 saml saml 0 Nov 15 20:12 c
-rw-rw-r-- 1 saml saml 0 Nov 15 20:12 d
-rw-rw-r-- 1 saml saml 0 Nov 15 20:12 e
-rw-rw-r-- 1 saml saml 0 Nov 15 20:12 f
이제 위의 확장을 시도해 보면 얼마나 공정한지 확인할 수 있습니다.
$ echo [a-d]
a A b B c d
$ echo {a..d}
a b c d
$ echo a* b*
a b
$ echo !(B)
a A b c d e f
$ echo !(A|B)
a b c d e f
확장된 와일드카드
다양한 다른 방법을 사용하여 셸 일치 방법을 제어할 수 있습니다. 예를 들어:
?(pattern-list) Matches zero or one occurrence of the given patterns
*(pattern-list) Matches zero or more occurrences of the given patterns
+(pattern-list) Matches one or more occurrences of the given patterns
@(pattern-list) Matches one of the given patterns
!(pattern-list) Matches anything except one of the given patterns
다음 Linux Journal 기사에서 이에 대한 자세한 내용을 읽을 수 있습니다.Bash 확장 와일드카드.
답변3
zsh
쉘(예: 대화형 쉘) 사용 bash
:
zsh -c 'xdg-open A/*(.)'
.
이것은 glob 수정자를 사용 하고 디렉토리 의 일반 파일 과만 zsh
일치합니다 . 일반 파일과도 심볼릭 링크를 일치시키려면 와일드카드 패턴을 사용하세요.A/*
A
A/*(-.)