[linux] tar : .svn 등을 포함하여 현재 디렉토리에있는 모든 파일과 디렉토리를 추가합니다.
tar.gz 디렉토리를 사용하고
tar -czf workspace.tar.gz *
결과 tar는 .svn
현재 디렉토리가 아닌 하위 디렉토리에있는 디렉토리를 포함 *
합니다 (tar로 전달되기 전에 ‘보이는’파일로만 확장 됨).
나는 노력했다
tar -czf workspace.tar.gz .
대신 ‘.’때문에 오류가 발생합니다. 읽는 동안 변경되었습니다.
tar: ./workspace.tar.gz: file changed as we read it
*
디렉토리의 모든 파일 (점 접두사 포함)과 일치 하는 트릭이 있습니까?
(Linux SLES-11 (2.6.27.19)에서 bash 사용)
답변
압축하려는 디렉토리에 tar 파일을 만들지 마십시오.
tar -czf /tmp/workspace.tar.gz .
압축을 풀 때 현재 디렉토리 전체에서 파일을 추출한다는 점을 제외하면 트릭을 수행합니다. 더 나은 방법 :
cd ..
tar -czf workspace.tar.gz workspace
또는 자신이 속한 디렉토리의 이름을 모르는 경우 :
base=$(basename $PWD)
cd ..
tar -czf $base.tar.gz $base
(이것은 사용자가 현재 위치에 도달하기 위해 심볼릭 링크를 따르지 않았고 셸이 심볼릭 링크를 통해 뒤로 점프하여 두 번째 추측을 시도하지 않는다고 가정합니다 bash
.이 점에서 신뢰할 수 없습니다. 걱정해야하는 경우, cd -P ..
물리적 변경 디렉토리를 수행하는 데 사용 합니다. 내 견해로는 기본 동작이 아니라는 것이 어리 석습니다. 적어도 cd ..
대체 의미가 없었던 사람들에게는 혼란 스럽 습니다.)
토론의 한 의견은 다음과 같습니다.
나는 […] 최상위 디렉토리를 제외하고 […] 기본 디렉토리에 tar를 배치해야합니다.
주석의 첫 부분은별로 의미가 없습니다. tar 파일에 현재 디렉토리가 포함되어 있으면 해당 아카이브에서 파일을 추출 할 때 생성되지 않습니다. 정의에 따라 현재 디렉토리가 이미 존재하기 때문입니다 (매우 이상한 상황 제외). ).
주석의 두 번째 부분은 다음 두 가지 방법 중 하나로 처리 할 수 있습니다.
- 또는
/tmp
가능한 위치 중 하나 인 다른 위치에 파일을 만든 다음 완료되면 원래 위치로 다시 이동합니다. - 또는 : GNU Tar를 사용하는 경우
--exclude=workspace.tar.gz
옵션을 사용하십시오 . 뒤의 문자열=
은 패턴입니다. 예는 가장 단순한 패턴입니다. 정확히 일치합니다.--exclude=./workspace.tar.gz
권장 사항과 달리 현재 디렉토리에서 작업 중인지 지정해야 할 수 있습니다 .--exclude=workspace/workspace.tar.gz
제안 된대로 한 수준 위로 작업 중인지 지정해야 할 수 있습니다 . 제외 할 tar 파일이 여러 개인 경우*
에서와 같이 ‘ ‘를 사용--exclude=./*.gz
합니다.
답변
당신이 경우 정말 타르의 최상위 디렉토리를 포함하지 않는 (그것은 좋은 생각이 일반적이다) :
tar czf workspace.tar.gz -C /path/to/workspace .
답변
취해야 할 몇 가지 단계가 있습니다.
- 교체
*
에 의해.
뿐만 아니라 숨겨진 파일을 포함하는. - 동일한 디렉토리에 아카이브를 생성하려면 a
--exclude=workspace.tar.gz
를 사용하여 아카이브 자체를 제외 할 수 있습니다. - 방지하려면이
tar: .: file changed as we read it
아카이브가 아직 생성되지 않은 경우 오류가 있는지가 (예를 들어, 사용하여 존재하게touch
) 너무 –exclude 아카이브 파일 이름과 일치. (파일이 존재하지 않는 것과 일치하지 않습니다)
이를 결합하면 다음 스크립트가 생성됩니다.
touch workspace.tar.gz
tar -czf workspace.tar.gz --exclude=workspace.tar.gz .
답변
압축하려는 디렉토리 (현재 디렉토리)에서 다음을 시도하십시오.
tar -czf workspace.tar.gz . --exclude=./*.gz
답변
디렉토리로 돌아가서 다음을 수행하여 숨겨진 디렉토리를 포함 할 수 있습니다.
cd ..
tar czf workspace.tar.gz workspace
gzip하려는 디렉토리를 작업 공간이라고 가정합니다.
답변
다음 .
을 사용하여 양식을 수정할 수 있습니다 --exclude
.
tar -czf workspace.tar.gz --exclude=workspace.tar.gz .
답변
업데이트 : OP의 의견에 대한 수정 사항을 추가했습니다.
tar -czf workspace.tar.gz .
실제로 현재 디렉토리를 변경하지만 파일을 다른 곳에 두지 않는 이유는 무엇입니까?
tar -czf somewhereelse/workspace.tar.gz .
mv somewhereelse/workspace.tar.gz . # Update