tar 압축에는 디렉터리 구조가 없습니다.

tar 압축에는 디렉터리 구조가 없습니다.

현재 디렉터리 아래에는 두 개의 하위 디렉터리가 있습니다.

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

--transformGNU 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

관련 정보