답변:
아니.
이 cp
명령에는 인수를 정규식으로 처리 할 수있는 기능이 없습니다. 와일드 카드조차도 (또는 대부분의 실행 파일) 처리하지 않습니다. 오히려 그들은 쉘에 의해 처리됩니다.
cp test/* test2/
실제로 bash에 의해 확장되며 cp
인수에 실제로 보이는 모든 것은 cp test/file1 test/file2 test/file3 test2/
(또는 실제 내용에 따라 적절한 것 test/
)입니다.
또한, 나는 당신의 표현 [^\.php]
이 당신이 원하는 것과 일치 한다고 생각하지 않습니다 (그것은 포함 된 파일과는 일치하지 않습니다 .php
).
find
정규식을 기반으로 파일 목록을 필터링하기 위해 유틸리티를 조사한 다음 xargs
리턴 된 파일 목록을 cp
명령 에 적용하는 데 사용 하려고합니다 (찾기에는 파일 복사를위한 내장 핸들러가 없다고 가정). m 공구에 친숙하지 않습니다).
시도해 볼 수 있습니다 :
find . ! -iregex ".*\.php.*" -exec cp {} /destination/folder/ \;
이것은 경로에 ".php"가 포함되지 않은 파일을 현재 디렉토리에서 재귀 적으로 검색하여에 복사하는 것 /destination/folder/
입니다.
요청에 따라 더 구체적인 인수 분석 :
.
-검색을 시작할 위치-이 경우 현재 디렉토리 !
- "Not"연산자, 다음 테스트 결과 반전 -iregex
-대소 문자를 구분하지 않는 정규식 테스트. 다음은 표현입니다. ".*\.php.*"
-정규식 일치 <Anything>.php<Anything>
-경로 어딘가에 ".php"가있는 파일. (이름에 ".php"가 포함 된 폴더 안에있는 것을 포함하여 파일 만 일치시키기 위해서는 더 복잡한 표현이 필요합니다)-exec
-위의 테스트에서 true를 반환하면 명령을 실행하십시오. 다음 인수는 명령이며 나머지 모든 인수는 명령 ;
으로 전달됩니다. 는 {}
파일 이름을 나타내는 특수 인수입니다.cp
-찾은 명령은 일치하는 각 경로 이름에서 실행해야합니다.{}
-찾은 파일의 경로, cp
복사 할 파일을 알 수 있도록 인수로 전달/destination/folder/
- 인수에 전달 cp
말하고, cp
이 파일을 복사 할 위치.\;
-이것은 찾고 있는 ;
터미네이터입니다 -exec
. 우리는 \
쉘이 구문 분석하려고하지 않고 대신 명령에 대한 인수로 피드하도록 ( find
)그것은 "이없는 문자열과 일치하는 정규 표현식을 작성하는 다소 어려운 .php
우리가 대신 말해 그래서," find
문자열을 검색 할 포함 .php
와 결과 반전 다음과 !
.
cp
다른 바이너리가 정규 표현식을 확장 할 수 없다는 것을 알지 못했습니다. 샘플 예제에서 각 옵션과 인수가 무엇을 의미하는지 자세히 설명해 주시겠습니까? 나는 알고 .
현재 디렉토리를 의미하지만, 무엇을 !
, {}
, \;
, 등 그들이 무엇을 의미하는지 잘으로 참조? 예를 들어 왜 ;
? 를 피해야 합니까?
find . -name '[^\.txt]' -exec rm {} \;
따라서 사용을 꺼려했다 find
. 아마도 내 실수 일지 모르지만 내가 뭘 잘못했는지 확실하지 않습니다. 내가 이해 {}
하는 한, 명령으로 찾은 각 파일을 참조하십시오find . -name '[^\.txt]'
grep 및 xargs와 같은 콘솔에서 다른 도구를 거의 사용할 수 없습니다.
ls -1 some_folder | egrep 'some_extended_regex' | xargs cp -t destination_folder
{}
의 그것과 다른 -t
?
find . -name [^\.php] -exec cp {} /path/to/location \;
특수 문자가있는 파일에주의하십시오.