tar 명령의 "--keep-newer-files" 옵션을 반드시 사용해야 하는 경우는 언제입니까?

tar 명령의 "--keep-newer-files" 옵션을 반드시 사용해야 하는 경우는 언제입니까?

tar명령 정보

소개하다

예를 들어:

source
 numbers
  001.txt # with the 111 content
  002.txt # with the 222 content
  003.txt # with the 333 content

numbers.tar.gzcommand 를 통해 파일을 생성하면 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디렉토리에서 명령을 실행하면 target002.txt파일은 다음과 같습니다.덮여이므로 222222 내용이 222로 반환됩니다. 나는 지금까지 괜찮습니다.

새 데이터를 안전하게 유지하거나 원치 않는 덮어쓰기를 방지하려면 다음에 따라 --keep-old-files및 옵션을 사용할 수 있습니다.--skip-old-filestar(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.txt002.txt
  • --keep-old-files, 001.txt002.txt는 추출되지 않으며 대상은 오래된 버전을 유지합니다 001.txt.
  • 를 사용하면 --keep-newer-files기존 001.txt파일이 아카이브에 있는 파일보다 오래되었기 때문에 기존 대상 파일을 추출하고 덮어쓰지만, 002.txt기존 파일이 아카이브에 있는 파일보다 최신이므로 추출되지 않습니다.

관련 정보