답변:
-C
옵션을 사용하여 다음 tar
을 수행 할 수 있습니다 .
tar -C /home/username/dir1/dir2 -cvf temp.tar selecteddir
의 맨 페이지에서 tar
:
-C 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.
dirname
"selecteddir"까지 모든 것을 basename
추출 하고 "selecteddir"을 추출 하는 데 사용할 수 있습니다 . $ path를 인수로 사용하여 두 명령을 시도하십시오.
tar -C /home/username/dir1/dir2 -cvf temp.tar '*.csv'
작동하지 않습니다.
이 문제에 접근하는 데 사용할 수있는 두 가지 방법이 있습니다.
제 생각에는 첫 번째가 더 쉽습니다. cd
압축하려는 디렉토리 바로 위의 디렉토리로 간단히 이동하십시오. 이 경우에는 그렇습니다 dir2
.
$ cd /home/username/dir1/dir2/
$ tar -cvf temp.tar selecteddir
두 번째 방법은 표현식 을 사용 하여 파일 이름에 대해 실행 --transform
하는 옵션을 사용하는 것 입니다 sed
. 참고 : 식에서 이스케이프 /
해야 sed
합니다.
$ tar -cvf temp.tar /home/username/dir1/dir2/selecteddir --transform='s/\/home\/username\/dir1\/dir2\///g'
tar: Cowardly refusing to create an empty archive
. 점이 있으면 짜증나게 루트에라는 디렉토리가 포함 .
됩니다. 따라서 가깝지만 완벽하지는 않습니다.
$ cd /home/username/dir1/dir2/ && tar -cvf temp.tar selecteddir *
나를 위해 일했다. 점 대신 별표를 사용합니다 .
. 업데이트 : Woops-숨겨진 파일을 잃어 버렸지 만.
실제로 Ketan의 답변을 사용하여 문제를 발견했습니다.
tar -C / home / username / dir1 / dir2 -cvf temp.tar selecteddir
dir2의 모든 파일을 복사하고 싶을 때 모든 파일 만 복사하려면 먼저 아이디어를 얻습니다.
tar -C / home / username / dir1 / dir2 -cvf temp.tar *
그러나 dir2 디렉토리에 있지 않으면 *가 현재 diectroy의 파일을 tar하기 때문에 문제가 발생할 수 있습니다. 그리고 아래 명령을 사용하여 문제를 해결했습니다.
tar -C /home/username/dir1/dir2 -cvf temp.tar ./
.
루트 폴더 가 포함 됩니다.