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

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

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

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

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

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



답변

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


답변

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

제 생각에는 첫 번째가 더 쉽습니다. 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'


답변

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

cd /your/working/directory/

그런 다음 마술을 사용하십시오 *🙂

tar -cvf temp.tar *


답변

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

답변