find $path1 $path2 -regex '.*\(\.log\|\.err\|\.out\)' -mtime -10 -exec cp "{}" $destination \;
이것은 위에 표시된 확장자를 가진 파일 이름을 찾기 위해 내 스크립트에 있는 명령입니다. 내 파일 중 일부에 "filename.extension.date"가 포함되어 있지만 검색할 수 없다는 사실을 발견할 때까지는 성공적이었습니다. 그래서 파일(filename.extension.date 및 filename.extension)을 얻을 수 있도록 확장자 대신 "단어/문자열"을 찾고 싶은 파일을 찾기 위해 -iname도 사용했지만 이해가 안 돼요. ) .
답변1
.log
.err
//여전히 추가 파일을 복사하고 싶은 경우.out
. 날짜접미사를 사용하고 다음을 가정합니다.날짜s는 YYYY-MM-DD 형식이고 GNU find
(정규식에서 사용하고 있음을 나타냄) 및 GNU 를 가정하면 cp
다음을 수행할 수 있습니다.
LC_ALL=C find "$path1" "$path2" \
-regextype posix-extended \
-regex '.*\.(log|err|out)(\.[0-9]{4}-[0-9]{2}-[0-9]{2})?' \
-type f \
-exec cp -t "$distination" {} +
YYYYMMDD 날짜 등 [0-9]{4}-[0-9]{2}-[0-9]{2}
으로 바꾸세요 .[0-9]{8}
확장된 .*\.(log|err|out)(\.[0-9]{4}-[0-9]{2}-[0-9]{2})?
정규식 일치:
.*
: 임의의 수(*
)의 문자(.
). 이는LC_ALL=C
사용자의 로케일에서 유효한 문자를 형성할 필요가 없는 모든 바이트를 의미합니다. 다음은:\.
: 텍스트.
(점/마침표). 다음은:(log|err|out)
:log
또는 .err
out
(...)?
: 선택적인 (?
)...
입니다...
.\.[0-9]{4}-[0-9]{2}-[0-9]{2}
, 다시 리터럴.
, 그 뒤에4
0-9 범위의 문자가 오고,LC_ALL=C
다시 한 번 0123456789라는 제한으로 인해-
해당 숫자 중 2개와-
2개의 숫자가 더 옵니다.
BSD를 사용하면 조건자 대신 옵션을 사용하여 인수를 확장 정규식으로 find
처리할 수 있습니다 .-E
-regextype posix-extended
-regex