현재 디렉터리 아래에는 두 개의 하위 디렉터리가 있습니다.
dir_1/
- file1.png
- file2.png
...
- fileN.png
dir_2/
- fileA.txt
- ...
- fileZ.txt
다음과 같이 두 디렉토리를 tar 압축할 때:
tar -cvzf result.tar.gz dir_1/ dir_2/
나는 얻었다result.tar.gz그러나 디렉토리 구조는 유지합니다. 내 말은, 내가 추출할 때result.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