cp에 정규식 사용하기

cp에 정규식 사용하기

이것은 간단한 질문입니다. 현재 디렉토리에서 .로 axis-2시작하고 끝나는 모든 파일을 .jar대상 디렉토리로 복사 하려고 합니다 ~/MyDirectory.

나의 첫 번째 시도는

cp '^axis2.*jar$' ~/MyDirectory

...하지만 이 작업을 시도하면 cp"해당 파일이나 디렉터리가 없습니다"라는 오류 메시지가 출력됩니다. 에서 정규식을 사용할 수 있는지 잘 모르겠습니다 cp. 또한 한동안 정규식을 사용하지 않았으며 구문에 문제가 있을 수 있습니다.

이 문제를 해결하는 방법에 대한 제안 사항이 있는 사람이 있습니까?

답변1

Linux/UNIX 시스템에서의 쉘 사용법글로벌 모드, 정규 표현식이 아닙니다. 따라서 axis2로 시작하고 끝나는 파일 이름을 일치시키려면 다음을 .jar사용할 수 있습니다.

cp axis2*.jar /destination/directory

답변2

GNU find및 GNU를 cp사용할 수 있는 경우 다음 명령과 같이 정규식을 사용할 수 있습니다.

find . -maxdepth 1 -regextype posix-basic -regex '.*/axis2[^/]*jar$' \
       -exec cp -t ~/MyDirectory {} +

이는 glob 모드나 bash 확장 glob 모드가 사용자의 요구 사항을 충족하지 않는 경우 편리합니다.

답변3

rename저는 Perl 스크립트 (Robin Barker 및 Larry Wall 작성) 의 정규식 구문을 정말 좋아합니다 . 예를 들면 다음과 같습니다.

rename "s/OldFile/NewFile/" OldFile*

OldFile.c각각 및 OldFile.h로 이름이 변경 되었습니다.NewFile.cNewFile.h

복사 명령을 사용하여 똑같은 결과를 얻고 싶습니다.

copy "s/OldFile/NewFile/" OldFile*

그래서 스크립트를 복사하고 rename 문을 copy via로 변경했습니다 File::Copy. 기다려 보세요! Perl-regex 구문을 사용하여 명령 복사:제시 워드/복사.

답변4

라는 명령 fd(때때로 이름이 지정됨 )이 있습니다 .fdfindfind

우리는 fd다음을 수행할 수 있습니다.

fd regexp             ... to get files matching regexp
... -x command        ... to execute `command` on the files

그래서 나는 다음을 제안합니다.

fd '^axis2.*jar$'  -x cp -t ~/MyDirectory

관련 정보