특정 파일 / 폴더를 아카이브에서 제외하는 것을 지원하는 간단한 쉘 명령 / 스크립트가 있습니까?
백업 할 필요가없는 매우 큰 파일이 많은 서브 디렉토리로 아카이브해야하는 디렉토리가 있습니다.
확실한 해결책은 아닙니다.
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
전에 소스 및 대상 항목.
답변
--exclude
tar 와 함께 디렉토리를 제외 할 수 있습니다 .
당신이 제외한 모든 것을 보관 /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}