터미널에서 파일을 열 때 와일드카드/와일드카드 사용

터미널에서 파일을 열 때 와일드카드/와일드카드 사용

폴더가 있습니다 A. 이 폴더 안에는 일부 파일이 있고 해당 파일을 포함하는 a,b,c,d하위 폴더가 있습니다 .Be,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/*AA/*(-.)

관련 정보