tar: .svn 등을 포함하여 현재 디렉터리에 있는 모든 파일 및 디렉터리를 추가
디렉토리에 tar.gz를 사용하려고 합니다.
tar -czf workspace.tar.gz *
에는 결과타다포함다니합을음는이 포함됩니다..svn 현디리가아닌하디리터렉의디리터렉위터재렉(as))*tartar에에 '됩니다.
하려고 했습니다.
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
링크를 따라가지이 심볼릭를 통해 을 가정합니다. - (당신당이있신이는이곳에도달위기하해따링않크르지볼심았를고셸점심당뒤링통이하다프여추하가다니합정않고다는지고려하측을신시로를크해릭볼것릭은▁(▁by▁assumes▁you▁that▁(▁youlink▁doesn▁guess▁shellthis가▁backwardslink▁and다않하니정▁you합▁that▁jumping▁are▁didn고다는지이▁second고추▁getbash이 점에서 신뢰할 수 없습니다.만약 당신이 그것에 대해 걱정해야 한다면, 사용하세요.cd -P ..물리적 변경 디렉토리를 수행합니다.내가 보기에 그것이 기본 행동이 아니라는 것은 어리석습니다 - 적어도, 그를 위한 사람들을 혼란스럽게 합니다.cd ..대체적인 의미가 없었습니다.)
토론의 한 의견은 다음과 같습니다.
[...]는 상위 디렉터리를 제외하고 [...]는 기본 디렉터리에 타르를 배치해야 합니다.
주석의 첫 번째 부분은 그다지 의미가 없습니다. tar 파일에 현재 디렉터리가 포함되어 있으면 정의에 따라 현재 디렉터리가 이미 존재하기 때문에 해당 아카이브에서 파일을 추출할 때 생성되지 않습니다(매우 이상한 경우 제외).
의견의 두 번째 부분은 다음 두 가지 방법 중 하나로 처리할 수 있습니다.
- 중 하나:. - 파일: 파일을 만듭니다.
/tmp하나의 가능한 위치입니다. 완료된 후 원래 위치로 다시 이동합니다. - Tar를 : GNU Tar를 합니다.
--exclude=workspace.tar.gz선택. 다문 뒤에 .=패턴(예: 가장 단순한 패턴)입니다. 정확하게 일치합니다.다을지 할수있다를 지정해야 할 .--exclude=./workspace.tar.gz에는 " 권사항반는대현되재작경서우는업하에다리토니있, " 다을지야할수습해정음장과렉디"를 해야 할 .--exclude=workspace/workspace.tar.gz제안된 대로 한 단계 위에서 작업하는 경우. 개인 에는 'tar tar 파여를개러 '를합니다.*에 있어서와 같이--exclude=./*.gz.
몇 가지 단계를 수행해야 합니다.
- 교체하다
*타고.숨김 파일도 포함합니다. - 동일한 디렉토리에 보관 파일을 작성하려면 a
--exclude=workspace.tar.gz보관 자체를 제외하는 데 사용할 수 있습니다. - 다음을 방지하기 위해
tar: .: file changed as we read it보관 파일이 아직 생성되지 않은 경우 오류, 보관 파일이 존재하는지 확인합니다(예:touch), --dll은 아카이브 파일 이름과 일치합니다.(파일이 존재하지 않는 것과 일치하지 않습니다.)
이 결과를 결합하면 다음 스크립트가 생성됩니다.
touch workspace.tar.gz
tar -czf workspace.tar.gz --exclude=workspace.tar.gz .
tarball에 최상위 디렉터리를 포함하지 않으려면(일반적으로 좋지 않은 생각입니다):
tar czf workspace.tar.gz -C /path/to/workspace .
압축할 디렉토리(현재 디렉토리)에서 다음을 시도합니다.
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
실제로 문제는 압축 옵션입니다.이 방법은 기본 제공 옵션을 사용하는 대신 압축기에 타르 결과를 파이프로 연결하는 것입니다.추가 압축 옵션을 설정할 수 있기 때문에 압축 기능도 향상될 수 있습니다.
최소 타르:
tar --exclude=*.tar* -cf workspace.tar .
원하는 압축기로 파이프 연결합니다.다음 예제는 상세하며 최대 압축을 가진 xz를 사용합니다.
tar --exclude=*.tar* -cv . | xz -9v >workspace.tar.xz
솔루션은 Ubuntu 14.04 및 Cygwin에서 윈도우즈 7에서 테스트되었습니다.커뮤니티 위키 답변이니, 실수가 발견되면 자유롭게 편집하세요.
나도 비슷한 상황이 있었습니다.다른 곳에서 tar를 생성한 후 -C를 사용하여 tar에게 압축 파일의 기본 디렉터리를 알려주는 것이 가장 좋다고 생각합니다.예:
tar -cjf workspace.tar.gz -C <path_to_workspace> $(ls -A <path_to_workspace>)
이렇게 하면 자신의 tar 파일을 제외할 필요가 없습니다.다른 주석에서 언급한 바와 같이 -A는 숨겨진 파일을 나열합니다.
폴더의 항목 수가 많지 않고 모든 이름에 문자가 포함되어 있지 않다고 가정하는 또 다른 솔루션은 셸이 구분 기호(흰색 공백)로 해석합니다.
tar -czf workspace.tar.gz `ls -A`
(ls -A일반 및 숨겨진 파일을 인쇄하지만 "." 및 "."은 인쇄하지 않습니다.ls -a합니다.)
좋은 질문.ZSH에서는 글로빙 수식어를 사용할 수 있습니다.(D)"점 파일"의 약자입니다.비교:
ls $HOME/*
그리고.
ls $HOME/*(D)
이렇게 하면 특수 디렉터리 항목이 올바르게 제외됩니다..그리고...에서는 Bash서 사할수있다습니를 사용할 수 ..*도트 파일을 명시적으로 포함하려면:
ls $HOME/* $HOME/.*
하지만 여기에는 다음을 포함합니다..그리고...또한, 그래서 그것은 당신이 찾던 것이 아닙니다.뭔가를 만들 방법이 있을 겁니다*match dot bash도 입니다.
여기서 제공되는 대부분의 해결책의 문제는 타르가 포함하고 있다는 것입니다../입장할 때마다 구걸로그래서 이것은 결과를 낳습니다..GUI 압축기를 통해 열 때 디렉터리가 나타납니다.그래서 제가 한 일은 다음과 같습니다.
ls -1A | xargs -d "\n" tar cfz my.tar.gz
계신 은.my.tar.gz현재 디렉터리에서 이 정보를 grep할 수 있습니다.
ls -1A | grep -v my.tar.gz | xargs -d "\n" tar cfz my.tar.gz
xargs에는 특정 한계가 있습니다( 참조).xargs --show-limits따라서 이 솔루션은 대상으로 지정하려는 디렉터리에 많은 항목(디렉토리 및 파일)이 있는 패키지를 생성하려는 경우에는 작동하지 않습니다.
10년 후, 당신은 다른 대안을 가지고 있습니다.tarGit 2.30 (Q1 2021)으로 그림을 그렸는데, 타르 대신 릴리스 타르볼을 생산하기 위해 ""를 git archive(man)사용합니다.
대안을 2 (Git 2.30은 Git 2.30입니다.)
4813277 커밋(2020년 10월 11일)을 참조하고 93e7031(2020년 10월 10일)을 르네 샤페()rscharfe가 커밋합니다.
(주니오 C 하마노에 의해 합병 -- -- 63e5273, 2020년 10월 27일 커밋)
Makefiledist-doc에 대해 git init/add/commit/dll 사용사인 오프 바이: 르네 샤페
tar 대신 명령을 사용하여 HTML 문서 및 manpage 배포 아카이브를 생성하여 외부 도구에 대한 의존성을 줄입니다.이렇게 하면 아카이브 항목에 바이너리에 대한 분산 아카이브의 메타데이터와 동일한 메타데이터가 제공됩니다.
그래서 대신에:
tar cf ../archive.tar .
Git만 사용할 수 있습니다.
git -C workspace init
git -C workspace add .
git -C workspace commit -m workspace
git -C workspace archive --format=tar --prefix=./ HEAD^{tree} > workspace.tar
rm -Rf workspace/.git
이는 여기서 설명한 것처럼 일부 이국적인 플랫폼에 옵션이 부족한 오래된 타르 분포가 있을 수 있기 때문에 처음에 제안되었습니다.
tar -czf workspace.tar.gz .??* *
지정.??*도트 뒤에 2자 이상의 "도트" 파일 및 디렉터리가 포함됩니다.은 점에 단일 문자가 있는 파일/입니다. 를 들어, 단은디다같점있파문단뒤다/것입포토를않니함는는다하지는일자리점일가에음렉과은디▁the/▁as/▁such,▁dot▁after▁files▁it▁withies것다▁will▁not포입▁is▁down니▁includedirector▁the▁a단▁character않▁side▁single점..a있는 경우에는
Disk 공간이 문제가 되지 않는 경우에는 매우 쉽게 수행할 수 있습니다.
mkdir backup
cp -r ./* backup
tar -zcvf backup.tar.gz ./backup
용사를 합니다.find가장 쉬운 방법은 다음과 같습니다.
find . -maxdepth 1 -exec tar zcvf workspace.tar.gz {} \+
find . -maxdepth 1 현재디디파리일모든/symlinks/etc를찾에로 합니다.-exec.{}명령에서 파일 목록이 여기로 이동하고\+명령이 다음과 같이 실행됨을 의미합니다.
tar zcvf workspace.tar.gz .file1 .file2 .dir3
대신에
tar zcvf workspace.tar.gz .file1
tar zcvf workspace.tar.gz .file2
tar zcvf workspace.tar.gz .dir3
언급URL : https://stackoverflow.com/questions/3651791/tar-add-all-files-and-directories-in-current-directory-including-svn-and-so-on
'programing' 카테고리의 다른 글
| [시스템] 유형을 찾을 수 없습니다.PowerShell의 Web.HttpUtility] (0) | 2023.05.24 |
|---|---|
| 피쳐 분기의 단일 파일을 마스터와 동일하게 재설정합니다. (0) | 2023.05.24 |
| 1.8.3에서 Gitstash pop 특정 스택을 어떻게 저장합니까? (0) | 2023.05.24 |
| Angular 2: 브라우저를 통해 새로 고칠 때 404 오류가 발생합니다. (0) | 2023.05.24 |
| C# %AppData% 경로 가져오기 (0) | 2023.05.24 |