200,000개 이상의 파일이 들어 있는 폴더가 있습니다. 특정 이름으로 시작하는 파일만 보관하고 싶습니다(파일 이름이 매우 큼). 예 sudo find /path/to/_Logs -name "RATE*" -print0 | xargs -0 tar -czf logs_rate.tgz
.
그러나 때때로 다음과 같은 메시지가 나타납니다.tar: 멤버 이름에서 선행 "/" 제거그리고 저장은 0으로 재설정되고 다시 시작됩니다. 그 과정을 마치고 나니 총 22,000개의 파일 중 25개 정도의 파일밖에 남지 않았습니다. 내가 무엇을 놓쳤거나 무엇을 잘못했나요?
답변1
의견에서 이미 알 수 있듯이 tar
여러 번 실행하면 됩니다 xargs
. 이 문제를 해결하는 가장 확실한 방법은 아카이브를 처음부터 다시 만드는 대신 파일을 아카이브에 추가하는 것입니다.
sudo find /path/to/_Logs -name "RATE*" -print0 | xargs -0 tar -rf logs_rate.tar
그런 다음 압축하십시오.
리더십에 관한 말은 /
단지 경고일 뿐이다.
답변2
해결 방법을 찾았습니다. 긴 이름과 큰 콘텐츠를 우회하려면 명령을 두 부분으로 분할하세요.
sudo find /path/to/_Logs -name "RATE*" > test1.txt
tar -czvT test1.txt -f logs.tgz
답변3
tar와 함께 xargs를 사용하지 마십시오. 이렇게 할 필요는 없습니다.
Gnu/tar(그리고 다른 tar에도 있다고 생각합니다) 에는 사이드 파일에서 파일 이름을 무제한으로 읽을 수 있는 옵션 -T
(긴 형식 : )이 있습니다. --files-from
(또한 를 사용하여 stdin을 통해 보낼 수도 있습니다 -T -
.)
이 --null
옵션을 사용하면 -T
목록에 다음과 같은 xargs
(같은 이유로) null로 끝나는 문자열이 포함될 수 있습니다.
-T
여러 가지 옵션을 사용할 수 있습니다. 로 시작하는 경로 이름에 유의하세요 -
.-T
-C