좋아요, 여기에 아주 간단한 문제입니다. 저는 간단한 백업 코드를 작성 중입니다. 파일에 공백이있는 경우를 제외하고는 잘 작동합니다. 이것이 내가 파일을 찾고 tar 아카이브에 추가하는 방법입니다.
find . -type f | xargs tar -czvf backup.tar.gz
문제는 tar가 폴더라고 생각하기 때문에 파일 이름에 공백이있는 경우입니다. 기본적으로 find 결과에 따옴표를 추가 할 수있는 방법이 있습니까? 아니면 이것을 고치는 다른 방법?
답변
이것을 사용하십시오 :
find . -type f -print0 | tar -czvf backup.tar.gz --null -T -
그것은 :
- 공백, 개행, 선행 대시 및 기타 재미있는 파일 처리
- 무제한의 파일 처리
- 많은 파일이있을 때
tar -c
withxargs
를 사용 하는 것처럼 backup.tar.gz를 반복적으로 덮어 쓰지 않습니다.
참조 :
- GNU tar 매뉴얼
- stdin에서 tar를 어떻게 만들 수 있습니까? , null 검색
답변
원하는 것을 달성하는 다른 방법이있을 수 있습니다. 원래,
- find 명령을 사용하여 원하는 파일의 경로를 출력 하십시오 . stdout 을 선택한 파일 이름으로 리디렉션 합니다.
-
그런 다음 -T 옵션과 함께 tar를 사용하여 파일 위치 목록을 가져올 수 있습니다 (방금 find!로 만든 위치).
find . -name "*.whatever" > yourListOfFiles tar -cvf yourfile.tar -T yourListOfFiles
답변
다음을 실행 해보십시오.
find . -type f | xargs -d "\n" tar -czvf backup.tar.gz
답변
왜 안 되는가 :
tar czvf backup.tar.gz *
물론 find를 사용하고 xargs를 사용하는 것이 영리하지만 어려운 방식으로 수행하고 있습니다.
업데이트 : Porges는 내 답변 또는 다른 답변보다 더 나은 답변이라고 생각하는 찾기 옵션으로 댓글을 달았습니다. find -print0 ... | xargs -0 ....
답변
여러 파일 또는 디렉토리가 있고이를 독립적 인 *.gz
파일 로 압축하려는 경우이 작업을 수행 할 수 있습니다. 선택 과목-type f -atime
find -name "httpd-log*.txt" -type f -mtime +1 -exec tar -vzcf {}.gz {} \;
이것은 압축됩니다
httpd-log01.txt
httpd-log02.txt
에
httpd-log01.txt.gz
httpd-log02.txt.gz
답변
다음과 같은 것을 시도해보십시오. tar cvf scala.tar `find src -name *.scala`