터미널에서 CP 명령을 실행할 때 와일드카드 사용 문제

터미널에서 CP 명령을 실행할 때 와일드카드 사용 문제

나는 처음이고 터미널 명령을 배우려고 노력합니다. 오늘 저는 cp 와일드카드 명령 옵션에 몇 가지 문제에 직면했습니다. 나는 터미널에 이 명령을 썼다

cp Downloads/[:alnum:]  test/

여기에 Downloads영숫자 문자 파일을 내 디렉토리로 복사하려는 디렉토리가 있습니다 test. 하지만 내가 실행했을 때 이 명령은 나에게 다음과 같은 것을 보여주었습니다:

cannot stat ‘Downloads/[:alnum:]’: No such file or directory

위의 와일드카드 클래스를 명령에 어떻게 사용할 수 있는지 알고 싶습니다 cp. 또한 위의 와일드카드 문자 명령을 사용하는 방법도 있습니다.

와일드카드는

 * 
? 
[characters]
[!characters]
[[:classes:]]

일반적으로 사용되는 클래스는

[:alnum:]-> Match any Alphanumeric Character
[:alpha:] -> Match any Alphabetic Character
[:digit:] -> Match any nummeral 
[:lower:] -> Matches any lowercase letter
[:upper:] -> Matches any Uppercase letter

와일드카드와 해당 클래스를 어떻게 사용할 수 있나요?

답변1

cp자체적으로는 와일드카드를 지원하지 않습니다. 와일드카드와 패턴의 확장은 bash기본적으로 셸에서 수행됩니다 .

[]어떤 경우든 문자 클래스는 이미 주변 클래스 를 제외하고 내부에서 지정됩니다 []. 다음과 같습니다:

cp Downloads/[[:alnum:]] test/

그러나 [[:alnum:]]단일 영숫자 문자만 일치합니다. 이미 나열된 와일드카드만으로는 영숫자 문자만 포함된 모든 파일 이름을 일치시킬 수 없습니다. 보다 강력한 필터링을 위해서는 다음 명령을 살펴보십시오 find.

find . -regextype posix-extended -maxdepth 1 -regex '.*/[[:alnum:]]*'

내에서 bash다음을 사용할 수 있습니다.확장된 글로브:

shopt -s extglob
cp Downloads/*([[:alnum:]]) test/

답변2

[:alnum:]실제로 단일 문자와 일치합니다.세트에서 :, a, l, n, u, m즉 주어진

$ ls
_?_  123  7  a  abc  :file  fi:le  m

그 다음에

$ ls [:alnum:]
a  m

영숫자의 단일 문자를 일치시키려면수업 [:alnum:]그럴 필요가있다[[:alnum:]]

$ ls [[:alnum:]]
7  a  m

단일 영숫자 문자와 그 뒤에 0개 이상의 임의 문자를 일치시키려면

$ ls [[:alnum:]]*
123  7  a  abc  fi:le  m

구성된 파일을 일치시키려면오직쉘 글로빙을 사용하는 영숫자 문자에는 다음이 필요합니다.확장된 글로브( extglob) 구문

$ ls +([[:alnum:]])
123  7  a  abc  m

관련 정보