파일을 찾으려면 검색 패턴을 grep하고 처음 10개 파일을 검색한 다음 해당 파일을 tar하십시오.

파일을 찾으려면 검색 패턴을 grep하고 처음 10개 파일을 검색한 다음 해당 파일을 tar하십시오.

저는 파일에서 패턴을 찾기 위해 find를 사용하고 있습니다. 그런 다음 처음 10개만 찾아서 압축하기를 원합니다.

find /var/log/file | xargs grep "pattern" | head -n10​ | tar -czvf tarfile.tgz

나도 xargs그것을 시도했습니다 tar. 이로 인해 오류가 발생할 수도 있습니다. 내가 뭘 잘못했나요?

이것이 첫 번째 명령에서 본 내용입니다.

tar: Cowardly refusing to create an empty archive
Try `tar --help' or `tar --usage' for more information.

답변1

당신은 그것을 사용할 수 있습니다

tar cvzf files.tar.gz $(find /var/log/file -type f -exec grep -l "pattern" {} + | \
head -n10)

여기에서는 grep -l패턴과 일치하는 파일만 인쇄됩니다.


-P이와 같은 오류가 발생하면 옵션을 사용해야 합니다.tar

오류 tar: 멤버 이름에서 선행 "/"를 제거합니다.

바라보다man tar

-P, --absolute-names
     don't strip leading '/'s from file names

또는 -C아카이브 파일의 전체 경로를 지정하는 대신 변경 디렉터리를 지정할 수 있습니다.

답변2

노력하다

tar cvzf tarfile.tgz $(find /var/log/file | grep "pattern" | head -n10 )

어디

  • 내부 코드는 $( )10개의 파일 목록을 작성합니다.

cpio와 달리 tar는 표준 입력에서 파일 목록을 허용하지 않습니다.

관련 정보