상위 디렉토리를 포함하지 않고 tar 아카이브 작성


62

스크립트 용 그래픽 프로그램을 만들려고합니다.

스크립트 내에서 tar를 사용하여 tar 아카이브를 만듭니다.

그래픽 프로그램에서 tar 아카이브를 만들려는 파일의 전체 이름을 얻습니다.

tar -cvf temp.tar /home/username/dir1/dir2/selecteddir 

내 tar 아카이브에는 home, username, dir1, dir2 및 selecteddir이 포함되어 있지만 tar는 selecteddir을 포함하여 아카이브 만 작성하려고합니다.

답변:


79

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

어떻게 $ path를 selecteddir로 분할하고 / home / username / dir1 / dir2까지 경로를 분할하여 -C 옵션
Sujit Maharjan이

@SujitMaharjan dirname"selecteddir"까지 모든 것을 basename추출 하고 "selecteddir"을 추출 하는 데 사용할 수 있습니다 . $ path를 인수로 사용하여 두 명령을 시도하십시오.
mkc

2
이것이 GNU와 BSD Tar 모두에 유효하다는 것을 덧붙일 가치가 있습니다.
Luke Exton

5
-C 옵션으로 globbing을 사용할 수 없습니다. tar -C /home/username/dir1/dir2 -cvf temp.tar '*.csv'작동하지 않습니다.
Christian Long

작동하지 않음 : tar : selecteddir : 통계 : 해당 파일 또는 디렉토리 없음
tribbloid

11

이 문제에 접근하는 데 사용할 수있는 두 가지 방법이 있습니다.

제 생각에는 첫 번째가 더 쉽습니다. 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. 점이 있으면 짜증나게 루트에라는 디렉토리가 포함 .됩니다. 따라서 가깝지만 완벽하지는 않습니다.
JW01

1
나의 이전 의견에 더. 내 문제를 해결했습니다. $ cd /home/username/dir1/dir2/ && tar -cvf temp.tar selecteddir *나를 위해 일했다. 점 대신 별표를 사용합니다 .. 업데이트 : Woops-숨겨진 파일을 잃어 버렸지 만.
JW01

6

먼저 작업 디렉토리로 이동하십시오.

cd /your/working/directory/ 

그런 다음 마술을 사용하십시오 *:-)

tar -cvf temp.tar *

숨겨진 디렉토리를 아카이브하려고하는데 직접 추가 (아니오 *)하면 작동하지만 * 사용시 아카이브 이름 만 아카이브에 추가합니다.
Ole

1

실제로 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 ./

6
그러나 temp.tar 아카이브에는 .루트 폴더 가 포함 됩니다.
cgrim
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.