일일 로그 아카이브에서 로그 범위를 선택하세요.

일일 로그 아카이브에서 로그 범위를 선택하세요.

다음과 같은 일일 로그가 포함된 폴더가 있습니다.

system-2013-01-01.log
system-2013-01-02.log
system-2013-01-03.log
system-2013-01-04.log
system-2013-01-05.log
system-2013-01-06.log
system-2013-01-07.log
system-2013-01-08.log
...
system-2013-01-31.log

2013-01-01부터 2013-01-15까지의 로그를 선택하고 복사하는 방법은 무엇입니까?

답변1

bash지원하다버팀대 확장를 사용하면 명령에서 확장할 여러 값이나 범위를 지정할 수 있습니다. 예를 들어,

$ echo {1..5}
1 2 3 4 5
$ echo foo_{01..05}
foo_01 foo_02 foo_03 foo_04 foo_05

따라서 복사할 파일 범위를 쉽게 지정할 수 있습니다.

cp system-2013-01-{01..31}.log /some/destination/dir

이는 다음 bash으로 확장됩니다.

cp system-2013-01-01.log system-2013-01-02.log system-2013-01-03.log ...

답변2

매일 파일이 있는 경우 다음에서 시퀀스 표현식을 사용할 수 있습니다.큰 괄호:

cp -p system-2013-01-{01..15}.log /elsewhere

일일 파일이 없으면 문자를 사용할 수 있습니다무늬.

cp -p system-2013-01-0[1-9].log system-2013-01-1[0-5].log /elsewhere

두 범위 중 하나에 일치하는 파일이 없으면 패턴은 확장되지 않은 상태로 유지됩니다. 설정빈 공이를 방지하기 위한 옵션(bash 전용)입니다( shopt nullglob).

Zsh는 숫자 범위를 통해 이를 더 쉽게 만듭니다.<start-stop>글로벌 모드.

cp -p system-2013-01-<1-15>.log /elsewhere

zsh가 필요하지 않고 더 복잡한 경우에 맞게 확장되는 또 다른 방법은 find파일 목록을 생성하는 것입니다. 불일치에 대해 걱정할 필요가 없습니다. cp모든 일치에 대해 수행됩니다.

find . \( -name 'system-2013-01-0[1-9].log' -o -name 'system-2013-01-1[0-5].log' \) -exec cp -p {} /elsewhere \;

하위 디렉터리로의 재귀를 방지하려면 -type d -prune -o뒤에 추가하세요 .find .

관련 정보