![여러 폴더를 재귀적으로, 일부는 비재귀적으로 tar업하는 방법](https://rvso.com/image/1597819/%EC%97%AC%EB%9F%AC%20%ED%8F%B4%EB%8D%94%EB%A5%BC%20%EC%9E%AC%EA%B7%80%EC%A0%81%EC%9C%BC%EB%A1%9C%2C%20%EC%9D%BC%EB%B6%80%EB%8A%94%20%EB%B9%84%EC%9E%AC%EA%B7%80%EC%A0%81%EC%9C%BC%EB%A1%9C%20tar%EC%97%85%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
디렉토리 목록이 있습니다. 일부 디렉토리에서는 재귀적으로 용량을 줄여야 하고 다른 디렉토리에는 하위 디렉토리 없이 해당 디렉토리에 있는 파일만 필요합니다. 아래 디렉토리/파일을 예로 사용하면 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.tar
f
- 스위치 에 대한 실제 인수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
단일 파일( ) 에 추가합니다 .file1
dir3
그리고 마지막으로 타르가 생성된 후의 모습입니다. 옵션 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
$