찾기 명령으로 여러 단어를 찾는 방법은 무엇입니까?

찾기 명령으로 여러 단어를 찾는 방법은 무엇입니까?
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또는 .errout
  • (...)?: 선택적인 ( ?) ...입니다 ....
  • \.[0-9]{4}-[0-9]{2}-[0-9]{2}, 다시 리터럴 ., 그 뒤에 40-9 범위의 문자가 오고, LC_ALL=C다시 한 번 0123456789라는 제한으로 인해 -해당 숫자 중 2개와 -2개의 숫자가 더 옵니다.

BSD를 사용하면 조건자 대신 옵션을 사용하여 인수를 확장 정규식으로 find처리할 수 있습니다 .-E-regextype posix-extended-regex

관련 정보