이것은 간단한 질문입니다. 현재 디렉토리에서 .로 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.c
NewFile.h
복사 명령을 사용하여 똑같은 결과를 얻고 싶습니다.
copy "s/OldFile/NewFile/" OldFile*
그래서 스크립트를 복사하고 rename 문을 copy via로 변경했습니다 File::Copy
. 기다려 보세요! Perl-regex 구문을 사용하여 명령 복사:제시 워드/복사.
답변4
라는 명령 fd
(때때로 이름이 지정됨 )이 있습니다 .fdfind
find
우리는 fd
다음을 수행할 수 있습니다.
fd regexp ... to get files matching regexp
... -x command ... to execute `command` on the files
그래서 나는 다음을 제안합니다.
fd '^axis2.*jar$' -x cp -t ~/MyDirectory