현재 디렉터리 아래에는 두 개의 하위 디렉터리가 있습니다.
dir_1/
- file1.png
- file2.png
...
- fileN.png
dir_2/
- fileA.txt
- ...
- fileZ.txt
다음을 통해 두 개의 디렉토리를 tar 압축할 때:
tar -cvzf result.tar.gz dir_1/ dir_2/
나는 가지고있다결과.tar.gz그러나 디렉토리 구조는 유지됩니다. 추출할 때를 의미합니다.결과.tar.gzdir_1
, 나는 & 를 다시 얻습니다 dir_2
.
디렉토리 구조가 보존되지 않도록 tar 압축하는 방법, 즉 tar.gz 파일을 추출하면 파일만 가져옵니다.
result/
file1.png
...
fileN.png
fileA.txt
...
fileZ.txt
답변1
그 옵션을 사용하면 그렇게 할 수 있다고 생각합니다 -C
.
tar 매뉴얼 페이지에서:
-C directory, --cd directory, --directory directory
In c and r mode, this changes the directory before adding the following files.
In x mode, change directories after opening the archive but before extracting
entries from the archive.
즉, 실행할 수 있어야 함을 의미합니다.
tar cvzf result.tar.gz -C /path/to/dir1/ . -C /path/to/dir2/ .
당신이 원하는 것을 달성하십시오.
답변2
--transform
GNU tar를 사용하면 아카이브에 파일을 추가하거나 아카이브에서 파일을 추출할 때 파일 이름을 다시 쓸 수 있는 옵션이 있습니다 . BSD tar 또는 pax의 경우 이 옵션은 -s
동일한 작업을 수행합니다.
선행 디렉토리 구성 요소를 제거하려면( dir_1/subdir/somefile
로 저장됨 subdir/somefile
) 다음을 수행하십시오.
tar -czf result.tar.gz --transform '!^[^/]*/!!' dir_1 dir_2
모든 디렉토리 구성 요소를 제거하려면( dir_1/subdir/somefile
로 저장하기 위해 somefile
):
tar -czf result.tar.gz --transform '!^.*/!!' dir_1 dir_2