programing

찾기를 사용하여 정규식으로 파일 이름을 검색하는 방법

copysource 2023. 6. 4. 18:28
반응형

찾기를 사용하여 정규식으로 파일 이름을 검색하는 방법

날짜가 지정된 모든 파일과 3일 이상 전의 모든 파일을 찾으려고 했습니다.

find /home/test -name 'test.log.\d{4}-d{2}-d{2}.zip' -mtime 3

그것은 아무것도 나열하지 않습니다.그게 뭐가 문제야?

find /home/test -regextype posix-extended -regex '^.*test\.log\.[0-9]{4}-[0-9]{2}-[0-9]{2}\.zip' -mtime +3
  1. -name와일드카드라고도 하는 구형 표현을 사용합니다.당신이 원하는 것은-regex
  2. 의도한 대로 간격을 사용하려면 다음과 같이 말해야 합니다.find를 통해 확장 정규식을 사용합니다.-regextype posix-extended깃발
  3. 정규식에서 마침표는 단일 문자의 특별한 의미를 가지므로 마침표를 이스케이프해야 합니다.원하는 것은 다음과 같은 문자 주기입니다.\.
  4. 3일 이상 지난 파일만 일치시키려면 번호 앞에 다음을 붙여야 합니다.+에 있어서와 같이-mtime +3.

개념 증명

$ find . -regextype posix-extended -regex '^.*test\.log\.[0-9]{4}-[0-9]{2}-[0-9]{2}\.zip'
./test.log.1234-12-12.zip

regex not -name을 사용하고 regex가 인쇄할 검색과 일치하는지 확인합니다(예: "test.log"가 아닌 "/home/test/test.log").

시작:

find . -name '*.log.*.zip' -a -mtime +1

정규식이 필요하지 않을 수도 있습니다.

 find . -name '*.log.*-*-*.zip' -a -mtime +1

1, 2, 3과 일치하도록 +1을 입력해야 합니다.

사용하다-regex:

맨 페이지에서:

-regex pattern
       File name matches regular expression pattern.  This is a match on the whole path, not a search.  For example, to match a file named './fubar3',  you  can  use  the
       regular expression '.*bar.' or '.*b.*3', but not 'b.*r3'.

또한, 나는 믿지 않습니다.find다음과 같은 정규식 확장 지원\d사용해야 합니다.[0-9].

find . -regex '.*test\.log\.[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]\.zip'

디렉터리 및 파일 검색을 위한 정규식에 대한 약간의 정교함

책과 같은 이름의 다이렉트로이 찾기

find . -name "*book*" -type d

북워드와 같은 이름의 파일 찾기

find . -name "*book*" -type f

언급URL : https://stackoverflow.com/questions/5249779/how-to-search-filenames-by-regex-with-find

반응형