2012-11-08 2 views
0

다음 스 니펫을 폴더의 bash 스크립트에서 실행하고 있습니다. 이렇게하면 내용을 보관중인 폴더에서 스크립트를 실행하고 있기 때문에 루트 폴더가없는 아카이브가 만들어집니다.아카이브의 루트 폴더를 만들지 않고 Tar 디렉터리 내용

tar -pczf $ARCHIVE_NAME --exclude=${ARCHIVE_NAME} --exclude=$(basename ${0}) * 

Archive Contents: 
/a/ 
/b/ 
/c/ 
/a_normal_file 

잘 작동하지만, 이후는 즉시 디렉토리에 *가 보관되지 않은 숨겨진 파일을 사용하고 있습니다. 좀 검색을했고, 내가 다음에 변경 archiving (ubuntu tar) hidden directories 발견 '.'

tar -pczf $ARCHIVE_NAME --exclude=${ARCHIVE_NAME} --exclude=$(basename ${0}) . 

Archive Contents: 
/./a/ 
/./b/ 
/./c/ 
/./.a_hidden_file 
/./a_normal_file 

여전히 작동하지만, 지금은 이름이되는으로 생성되는 루트 폴더가 캐릭터. 내용은 그 안에 있습니다. 이전 결과를 어떻게 얻을 수 있습니까? 그러나 직접 파일의 숨겨진 파일을 보관하는 위치는 어디입니까?

미리 감사드립니다. (. 그냥 같은 디렉토리를 의미 때문에)는 아카이브의 압축 풀기에 영향을 미치지 않지만 당신을 귀찮게하는 경우

답변

1

는, 당신은뿐만 아니라 모든 숨겨진 파일을 포함 *에서 .[^.]* *에 와일드 카드를 변경할 수 있습니다.

..a과 같이 ..으로 시작하는 파일을 숨긴 경우 ..?*도 추가해야합니다.

+0

멋진 덕분에, 뭔가 새로운 일상을 배울! –

4

사용 -C는 --directory DIR

--directory=$(dirname ${0}) 

예 :

$ ls -a xxx 
. .. aaa .bbb 
$ tar cvf test.tar --exclude test.tar -C xxx . 
./ 
./.bbb 
./aaa 
+0

몇 가지 설명이 대답을 도울 것입니다. – dove

+0

예제를 추가하여 답변을 편집했습니다. "-C"매개 변수는 아카이브 할 파일을 나열하기 전에 현재 작업 디렉토리를 변경합니다 (파일에 상대 경로가 있음). "$ (dirname $ {0})"은 스크립트가 실행 된 디렉토리입니다 (필자는 저자가 해당 디렉토리에 파일을 보관하려고했습니다). – csgwro

관련 문제