생성 된 uuid1 문자열로 이름이 지정된 이미지가 있습니다. 예를 들어 81397018-b84a-11e0-9d2a-001b77dc0bed.jpg입니다. "find"명령을 사용하여 이러한 이미지를 모두 찾고 싶습니다.
find . -regex "[a-f0-9\-]\{36\}\.jpg".
그러나 작동하지 않습니다. 정규식에 문제가 있습니까? 누군가 나를 도와 줄 수 있습니까?
생성 된 uuid1 문자열로 이름이 지정된 이미지가 있습니다. 예를 들어 81397018-b84a-11e0-9d2a-001b77dc0bed.jpg입니다. "find"명령을 사용하여 이러한 이미지를 모두 찾고 싶습니다.
find . -regex "[a-f0-9\-]\{36\}\.jpg".
그러나 작동하지 않습니다. 정규식에 문제가 있습니까? 누군가 나를 도와 줄 수 있습니까?
답변:
find . -regextype sed -regex ".*/[a-f0-9\-]\{36\}\.jpg"
전체 경로와 일치 .*/
하므로 처음 에 지정해야 find
합니다.
예:
susam@nifty:~/so$ find . -name "*.jpg"
./foo-111.jpg
./test/81397018-b84a-11e0-9d2a-001b77dc0bed.jpg
./81397018-b84a-11e0-9d2a-001b77dc0bed.jpg
susam@nifty:~/so$
susam@nifty:~/so$ find . -regextype sed -regex ".*/[a-f0-9\-]\{36\}\.jpg"
./test/81397018-b84a-11e0-9d2a-001b77dc0bed.jpg
./81397018-b84a-11e0-9d2a-001b77dc0bed.jpg
내 버전 찾기 :
$ find --version
find (GNU findutils) 4.4.2
Copyright (C) 2007 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Eric B. Decker, James Youngman, and Kevin Dalley.
Built using GNU gnulib version e5573b1bad88bfabcda181b9e0125fb0c52b7d3b
Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION FTS() CBO(level=0)
susam@nifty:~/so$
susam@nifty:~/so$ find . -regextype foo -regex ".*/[a-f0-9\-]\{36\}\.jpg"
find: Unknown regular expression type `foo'; valid types are `findutils-default', `awk', `egrep', `ed', `emacs', `gnu-awk', `grep', `posix-awk', `posix-basic', `posix-egrep', `posix-extended', `posix-minimal-basic', `sed'.
"^ ... $"
합니다. 전체 결과 행과 일치해야합니다.
/
in 이 필요하다고 생각하지 않습니다 . .*/
.*
\{36\}
valid types are 'findutils-default', 'awk', ' egrep', 'ed', 'emacs', 'gnu-awk', 'grep', 'posix-awk', 'posix-basic', 'posix-egrep', 'posix -extended', 'posix-minimal-basic', 'sed'.
-regextype
플래그를 하기 전에-regex
그렇지 않으면 적용되지 않습니다, 플래그!
-regex
찾기 표현식은 일치 전체 이름 현재 디렉토리에서 상대 경로를 포함하여. 이를 find .
위해서는 항상로 시작하고 ./
모든 디렉토리로 시작 하십시오.
또한 이들은 emacs
정규 표현식이며 일반적인 egrep 정규 표현식과 다른 이스케이프 규칙이 있습니다.
이것들이 모두 현재 디렉토리에 직접 있다면
find . -regex '\./[a-f0-9\-]\{36\}\.jpg'
작동해야합니다. (정확하지는 않습니다. 여기서 반복 계산을 수행 할 수 없습니다.) 다음과 같이 egrep 표현식으로 전환 할 수 있습니다 -regextype posix-egrep
.
find . -regextype posix-egrep -regex '\./[a-f0-9\-]{36}\.jpg'
(여기서 말한 모든 것은 GNU 찾기를위한 것이므로, BSD에 대해서는 Mac에서도 기본값입니다.)
posix-egrep
유형이 효과적이었습니다.
-regextype
GNU에 대한 옵션입니다 find
(적어도 Mac BSD와 같지 않음) find
. 이 옵션을 사용할 수 없으면 GNU find를 설치하십시오. Mac의 경우 brew package로 가능합니다 findutils
. 그런 다음를 통해 찾기를 사용할 수 있습니다 gfind
.
다른 답변으로 판단하면 이것이 잘못된 것 같습니다.
그러나 대신 다음과 같이 할 수 있습니다.
find . * | grep -P "[a-f0-9\-]{36}\.jpg"
grep을 약간 조정하고 원하는 것에 따라 다른 옵션을 사용해야 할 수도 있지만 작동합니다.
find
'의 -prune
모두 특정 디렉토리를 건너 것이다 기능. 대부분 이것이 중요하지는 않지만 언급 할 가치가 있습니다.
Mac OS X (BSD 찾기) : 허용되는 답변과 동일하며 .*/
접두사는 전체 경로와 일치해야합니다.
$ find -E . -regex ".*/[a-f0-9\-]{36}.jpg"
man find
-E
확장 정규식 지원을 사용 한다고 말합니다.
-E
우분투 (WSL 우분투에서 테스트)에 사용할 수 없습니다
간단한 방법-find는 전체 경로와 일치하므로 처음에. *를 지정할 수 있습니다.
$ find . -regextype egrep -regex '.*[a-f0-9\-]{36}\.jpg$'
버전 찾기
$ find --version
find (GNU findutils) 4.6.0
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
<http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Eric B. Decker, James Youngman, and Kevin Dalley.
Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION
FTS(FTS_CWDFD) CBO(level=2)