
나는 처음이고 터미널 명령을 배우려고 노력합니다. 오늘 저는 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