[linux] 특정 파일 / 폴더를 제외한 tar 디렉토리에 대한 쉘 명령

특정 파일 / 폴더를 아카이브에서 제외하는 것을 지원하는 간단한 쉘 명령 / 스크립트가 있습니까?

백업 할 필요가없는 매우 큰 파일이 많은 서브 디렉토리로 아카이브해야하는 디렉토리가 있습니다.

확실한 해결책은 아닙니다.

tar --exclude=PATTERN명령은 지정된 패턴과 제외 해당 파일을 일치하지만 나는 특정 파일 및 폴더를 무시하는 (전체 파일 경로), 그렇지 않으면 유효한 파일이 제외 될 수 있어야합니다.

find 명령을 사용하여 파일 목록을 작성하고 아카이브하지 않고 목록을 tar에 전달하려는 파일을 제외시킬 수 있지만 소량의 파일에 대해서만 작동합니다. 나는 수만명이 있습니다.

유일한 해결책은 제외 할 파일 / 폴더 목록이있는 파일을 만든 다음 rsync with --exclude-from=file를 사용 하여 모든 파일을 tmp 디렉토리에 복사 한 다음 tar를 사용하여 해당 디렉토리를 아카이브하는 것입니다.

더 좋고 더 효율적인 솔루션을 생각할 수 있습니까?

편집 : Charles Ma 의 솔루션이 잘 작동합니다. 가장 큰 문제는 tar 명령의 시작 부분에 --exclude='./folder' 있어야 한다는 것 입니다. 전체 명령 (CD 우선, 백업은 해당 디렉토리를 기준으로 함) :

cd /folder_to_backup
tar --exclude='./folder' --exclude='./upload/folder2' -zcvf /backup/filename.tgz .



답변

tar에 대해 여러 제외 옵션을 사용할 수 있으므로

$ tar --exclude='./folder' --exclude='./upload/folder2' -zcvf /backup/filename.tgz .

등이 작동합니다. 확인 확인 넣어 --exclude 전에 소스 및 대상 항목.


답변

--excludetar 와 함께 디렉토리를 제외 할 수 있습니다 .

당신이 제외한 모든 것을 보관 /usr하려면 다음을 사용할 수 있습니다.

tar -zcvf /all.tgz / --exclude=/usr

귀하의 경우 아마도

tar -zcvf archive.tgz arc_dir --exclude=dir/ignore_this_dir


답변

tar를 사용하여 백업에서 파일 / 디렉토리를 제외 할 수있는 옵션 :

여러 패턴을 사용하여 파일 제외

tar -czf backup.tar.gz --exclude=PATTERN1 --exclude=PATTERN2 ... /path/to/backup

패턴 목록으로 채워진 제외 파일을 사용하여 파일 제외

tar -czf backup.tar.gz -X /path/to/exclude.txt /path/to/backup

건너 뛸 디렉토리에 태그 파일을 배치하여 태그를 사용하여 파일을 제외하십시오.

tar -czf backup.tar.gz --exclude-tag-all=exclude.tag /path/to/backup


답변

많은 답변이있는 오래된 질문이지만, 나에게 충분히 명확한 것이 없다는 것을 알았으므로 시도를 추가하고 싶습니다.

다음 구조를 가지고 있다면

/home/ftp/mysite/

다음 파일 / 폴더 포함

/home/ftp/mysite/file1
/home/ftp/mysite/file2
/home/ftp/mysite/file3
/home/ftp/mysite/folder1
/home/ftp/mysite/folder2
/home/ftp/mysite/folder3

따라서 / home / ftp / mysite 내부에 모든 것을 포함하는 tar 파일을 만들고 싶지만 (사이트를 새 서버로 옮기기 위해) file3정크 파일이므로 모든 것이 folder3필요하지 않으므로 두 파일을 건너 뜁니다.

우리는 형식을 사용합니다

tar -czvf <name of tar file> <what to tar> <any excludes>

여기서 c = create, z = zip 및 v = verbose (입력 한 파일을 볼 수 있으며 제외하는 파일이 추가되지 않도록하는 데 유용함) 및 f = 파일.

그래서 내 명령은 다음과 같습니다

cd /home/ftp/
tar -czvf mysite.tar.gz mysite --exclude='file3' --exclude='folder3'

제외 된 파일 / 폴더는 상대적으로 tar의 루트에 있습니다 (여기서는 /와 관련하여 전체 경로를 시도했지만 그 작업을 수행 할 수는 없습니다).

이것이 누군가를 도울 수 있기를 바랍니다 (그리고 다음 번에 Google에서 할 때)


답변

표준 “ant notation”을 사용하여 상대 디렉토리를 제외 할 수 있습니다.
이것은 저에게 효과적이며 .git 또는 node_module 디렉토리를 제외합니다.

tar -cvf myFile.tar --exclude=**/.git/* --exclude=**/node_modules/*  -T /data/txt/myInputFile.txt 2> /data/txt/myTarLogFile.txt

myInputFile.txt는 다음을 포함합니다 :

/ dev2 / java
/ dev2 / javascript


답변

나는 적어도 Cygwin 에서 그것을 경험했습니다. 버전의 tar에서 나는 ( “CYGWIN_NT-5.1 1.7.17 (0.262 / 5 / 3) 2012-10-19 14:39 i686 Cygwin”을 Windows XP Home Edition에서 사용하고 있습니다. 옵션 순서는 중요합니다.

이 건설이 나를 위해 일하는 동안 :

tar cfvz target.tgz --exclude='<dir1>' --exclude='<dir2>' target_dir

그 하나 작동 하지 않았다 :

tar cfvz --exclude='<dir1>' --exclude='<dir2>' target.tgz target_dir

이것은 tar --help다음 을 밝힙니다.

tar [OPTION...] [FILE]

따라서 두 번째 명령도 작동해야하지만 분명히 그렇지는 않습니다 …

최고의 rgds,


답변

이 제외 패턴은 png 또는 mp3와 같은 파일 이름 접미사와 .git 및 node_modules와 같은 디렉토리 이름을 처리합니다.

tar --exclude={*.png,*.mp3,*.wav,.git,node_modules} -Jcf ${target_tarball}  ${source_dirname}