여러 폴더를 재귀적으로, 일부는 비재귀적으로 tar업하는 방법

여러 폴더를 재귀적으로, 일부는 비재귀적으로 tar업하는 방법

디렉토리 목록이 있습니다. 일부 디렉토리에서는 재귀적으로 용량을 줄여야 하고 다른 디렉토리에는 하위 디렉토리 없이 해당 디렉토리에 있는 파일만 필요합니다. 아래 디렉토리/파일을 예로 사용하면 tar 명령이 어떻게 표시됩니까?

/tmp/dir1/ - Recursively
/tmp/dir2/ - Only the files that exist in that directory, no subdirectories
/tmp/dir3/file1 - Only this single file.

답변1

내가 생각해낸 내용은 다음과 같습니다.

먼저, 예시로 사용하고 있는 디렉터리 구조는 다음과 같습니다.

$ find dir1 dir2 dir3 -print
dir1
dir1/file1
dir1/file2
dir1/sub_dir1
dir1/sub_dir1/file1
dir2
dir2/file1
dir2/file2
dir2/sub_dir1
dir2/sub_dir1/file1
dir3
dir3/file1
$

다음으로 세 가지 명령으로 구성된 내 솔루션은 다음과 같습니다.

첫 번째 명령:

tar cvf archive.tar dir1

꽤 표준적입니다. 그것을 분해해보자:

  • c- 만들다
  • v- 자세한 내용(무슨 일이 일어나는지 살펴보겠습니다)
  • f- 우리의 경우에는 원하는 파일 이름archive.tar
  • archive.tarf- 스위치 에 대한 실제 인수
  • dir1- 실제로 타르업하려는 것

두 번째 명령:

find dir2 -maxdepth 1 -type f -print0 | xargs -0 tar rvf archive.tar

그것을 분해해보자:

  • find dir2- 우리가 검색하고 싶은 곳을 찾으세요.
  • -maxdepth 1- 깊이 1보다 더 아래로 내려가지 마세요(의 루트에 유지 dir2).
  • -type f- 파일 검색
  • -print0- 끝에 개행 문자를 인쇄하지 말고 대신 널 문자를 사용하십시오. find가 공백 문자가 있는 파일을 찾는 경우 이는 도움이 됩니다.
  • | xargs -0- find 명령으로 찾은 표준 입력은 우리의 명령을 존중하면서 실행되도록 여기에 던져집니다.print0
  • tar rvf- 여기서 유일한 새 스위치는 입니다 r. 이것이 추가 옵션입니다. 그것은 archive.tar끝에 우리에게 추가됩니다 . A추가 아카이브 추가와 관련된 옵션( .tar-s) 과 혼동하지 마십시오 .
  • archive.tar- 추가하려는 tar입니다.

    이 명령의 끝은 stdinput이 사용되는 곳입니다. 예를 들어archive.tar <stdinput>

세 번째 명령:

tar rvf archive.tar dir3/file1

에서 archive.tar단일 파일( ) 에 추가합니다 .file1dir3

그리고 마지막으로 타르가 생성된 후의 모습입니다. 옵션 t은 내용을 인쇄하는 데 사용됩니다.

$ tar tvf archive.tar
drwxrwxr-x mmallard/mmallard 0 2019-07-18 16:02 dir1/
-rw-rw-r-- mmallard/mmallard 0 2019-07-18 16:01 dir1/file1
-rw-rw-r-- mmallard/mmallard 0 2019-07-18 16:01 dir1/file2
drwxrwxr-x mmallard/mmallard 0 2019-07-18 16:02 dir1/sub_dir1/
-rw-rw-r-- mmallard/mmallard 0 2019-07-18 16:02 dir1/sub_dir1/file1
-rw-rw-r-- mmallard/mmallard 0 2019-07-18 16:02 dir2/file1
-rw-rw-r-- mmallard/mmallard 0 2019-07-18 16:02 dir2/file2
-rw-rw-r-- mmallard/mmallard 0 2019-07-18 16:02 dir3/file1
$

관련 정보