tar
명령 정보
소개하다
예를 들어:
source
numbers
001.txt # with the 111 content
002.txt # with the 222 content
003.txt # with the 333 content
numbers.tar.gz
command 를 통해 파일을 생성하면 tar -czf numbers.tar.gz numbers
이제 다음과 같은 결과가 나타납니다.
source
numbers.tar.gz
numbers
001.txt # with the 111 content
002.txt # with the 222 content
003.txt # with the 333 content
mv numbers.tar.gz target
명령이 실행되는지 여부를 고려하여 다음을 수행합니다.
target
numbers.tar.gz
tar -xzf numbers.tar.gz
명령이 실행되면 우리 는
target
numbers.tar.gz
numbers
001.txt # with the 111 content
002.txt # with the 222 content
003.txt # with the 333 content
따라서 일반적인 개요는 다음과 같습니다.
source
numbers.tar.gz
numbers
001.txt # with the 111 content
002.txt # with the 222 content
003.txt # with the 333 content
target
numbers.tar.gz
numbers
001.txt # with the 111 content
002.txt # with the 222 content
003.txt # with the 333 content
우선순위 제어
다음과 같은 간단한 업데이트를 가정해 보겠습니다.
target
numbers.tar.gz
numbers
001.txt # with the 111 content
002.txt # with the 222222 content <--- updated
003.txt # with the 333 content
tar -xzf numbers.tar.gz
디렉토리에서 명령을 실행하면 target
002.txt
파일은 다음과 같습니다.덮여이므로 222222 내용이 222로 반환됩니다. 나는 지금까지 괜찮습니다.
새 데이터를 안전하게 유지하거나 원치 않는 덮어쓰기를 방지하려면 다음에 따라 --keep-old-files
및 옵션을 사용할 수 있습니다.--skip-old-files
tar(1) - Linux 매뉴얼 페이지, 이는 다음을 의미합니다.
-k, --keep-old-files
don't replace existing files when extracting, treat them as errors
--skip-old-files
don't replace existing files when extracting, silently skip over them
따라서 다음 두 명령을 실행하려면 다음을 수행하십시오.
tar --keep-old-files -xzf numbers.tar.gz
tar --skip-old-files -xzf numbers.tar.gz
다음과 같은 일이 발생합니다.
- 전자는 항상
tar: numbers/222.txt: Cannot open: File exists
오류 메시지를 표시하고 데이터는 안전하게 유지됩니다(222222로 유지됨). - 후자는 아무것도 표시하지 않습니다. 예외는
v
이 옵션을 사용하는 경우입니다tar: numbers/222.txt: skipping existing file
. 메시지를 표시하고 데이터는 안전하게 유지됩니다(222222로 예약됨). 스크립팅 목적에 유용합니다.
여태까지는 그런대로 잘됐다.
--keep-newer-files
조사한 후 옵션을 찾았고 다시 따랐습니다.tar(1) - Linux 매뉴얼 페이지, 이는 다음을 의미합니다.
--keep-newer-files
don't replace existing files that are newer than their archive copies
따라서 다음 명령을 실행하려면:
tar --keep-newer-files -xzf numbers.tar.gz
다음과 같은 일이 발생합니다.
- 메시지가 나타나고
tar: Current ‘numbers/222.txt’ is newer or same age
데이터는 안전하게 유지됩니다(222222로 유지됨).
실제로 이 옵션은 덮어쓰기를 방지하는 것과 --keep-newer-files
동일한 작업을 수행합니다.--skip-old-files
하지만다양한 메시지를 표시합니다.
질문
- 및 옵션 대신 명령
--keep-newer-files
의 옵션을 사용해야 하는 경우는 언제입니까 ?tar
--keep-old-files
--skip-old-files
이 옵션이 필수인 특정 시나리오가 무엇인지 알고 싶습니다.
답변1
--keep-newer-files
대상에 대한 변경 사항을 보존하려는 경우 유용합니다.뒤쪽에소스 파일은 마지막으로 수정되었으며 대상의 이전 버전은 소스의 최신 버전으로 대체됩니다.
이 두 옵션의 차이점을 설명하려면 각 파일의 타임스탬프라는 또 다른 정보가 필요합니다. 다음을 고려하세요:
source
numbers
001.txt # timestamp t1, contents 1
002.txt # timestamp t1, contents 222
003.txt # timestamp t1, contents 333
target
타임스탬프를 보존 하려면 이 파일을 복사하세요 .
source
numbers
001.txt # timestamp t1, contents 1
002.txt # timestamp t1, contents 222
003.txt # timestamp t1, contents 333
target
numbers
001.txt # timestamp t1, contents 1
002.txt # timestamp t1, contents 222
003.txt # timestamp t1, contents 333
이제 네가 001.txt
고쳐원천(관찰 t2
부분):
source
numbers
001.txt # timestamp t2, contents 111
002.txt # timestamp t1, contents 222
003.txt # timestamp t1, contents 333
target
numbers
001.txt # timestamp t1, contents 1
002.txt # timestamp t1, contents 222
003.txt # timestamp t1, contents 333
또한 002.txt
편집됨표적(관찰 t3
부분):
source
numbers
001.txt # timestamp t2, contents 111
002.txt # timestamp t1, contents 222
003.txt # timestamp t1, contents 333
target
numbers
001.txt # timestamp t1, contents 1
002.txt # timestamp t3, contents 22222
003.txt # timestamp t1, contents 333
새 아카이브를 생성하고 대상에서 추출합니다.
- 옵션이 없으면 모든 파일이 추출되므로 대상은 소스의 동일한 콘텐츠로 끝나고 대상에 대한 변경 사항은
001.txt
손실됩니다 .002.txt
002.txt
- 와
--keep-old-files
,001.txt
및002.txt
는 추출되지 않으며 대상은 오래된 버전을 유지합니다001.txt
. - 를 사용하면
--keep-newer-files
기존001.txt
파일이 아카이브에 있는 파일보다 오래되었기 때문에 기존 대상 파일을 추출하고 덮어쓰지만,002.txt
기존 파일이 아카이브에 있는 파일보다 최신이므로 추출되지 않습니다.