Zip/Unzip, Tar, Rsync

Zip/Unzip#

install#

sudo apt-get install zip unzip

zip#

zip {압축 파일명}.zip {압축할 파일 혹은 디렉토리1} {압축할 파일 혹은 디렉토리2}...
$ zip --help
Copyright (c) 1990-2008 Info-ZIP - Type 'zip "-L"' for software license.
Zip 3.0 (July 5th 2008). Usage:
zip [-options] [-b path] [-t mmddyyyy] [-n suffixes] [zipfile list] [-xi list]
  The default action is to add or replace zipfile entries from list, which
  can include the special name - to compress standard input.
  If zipfile and list are omitted, zip compresses stdin to stdout.
  -f   freshen: only changed files  -u   update: only changed or new files
  -d   delete entries in zipfile    -m   move into zipfile (delete OS files)
  -r   recurse into directories     -j   junk (don't record) directory names
  -0   store only                   -l   convert LF to CR LF (-ll CR LF to LF)
  -1   compress faster              -9   compress better
  -q   quiet operation              -v   verbose operation/print version info
  -c   add one-line comments        -z   add zipfile comment
  -@   read names from stdin        -o   make zipfile as old as latest entry
  -x   exclude the following names  -i   include only the following names
  -F   fix zipfile (-FF try harder) -D   do not add directory entries
  -A   adjust self-extracting exe   -J   junk zipfile prefix (unzipsfx)
  -T   test zipfile integrity       -X   eXclude eXtra file attributes
  -y   store symbolic links as the link instead of the referenced file
  -e   encrypt                      -n   don't compress these suffixes
zip -r test.zip ./test/

unzip#

unzip {압축 파일명}.zip
$ unzip --help
UnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP.

Usage: unzip [-Z] [-opts[modifiers]] file[.zip] [list] [-x xlist] [-d exdir]
  Default action is to extract files in list, except those in xlist, to exdir;
  file[.zip] may be a wildcard.  -Z => ZipInfo mode ("unzip -Z" for usage).

  -p  extract files to pipe, no messages     -l  list files (short format)
  -f  freshen existing files, create none    -t  test compressed archive data
  -u  update files, create if necessary      -z  display archive comment only
  -v  list verbosely/show version info       -T  timestamp archive to latest
  -x  exclude files that follow (in xlist)   -d  extract files into exdir
modifiers:
  -n  never overwrite existing files         -q  quiet mode (-qq => quieter)
  -o  overwrite files WITHOUT prompting      -a  auto-convert any text files
  -j  junk paths (do not make directories)   -aa treat ALL files as text
  -U  use escapes for all non-ASCII Unicode  -UU ignore any Unicode fields
  -C  match filenames case-insensitively     -L  make (some) names lowercase
  -X  restore UID/GID info                   -V  retain VMS version numbers
  -K  keep setuid/setgid/tacky permissions   -M  pipe through "more" pager
  -O CHARSET  specify a character encoding for DOS, Windows and OS/2 archives
  -I CHARSET  specify a character encoding for UNIX and other archives

See "unzip -hh" or unzip.txt for more help.  Examples:
  unzip data1 -x joe   => extract all files except joe from zipfile data1.zip
  unzip -p foo | more  => send contents of foo.zip via pipe into program more
  unzip -fo foo ReadMe => quietly replace existing ReadMe if archive file newer
unzip test.zip -d /home/john 

tar#

옵션 요약#

# tar.gz 만들기
tar -czvf backup.tar.gz mydir/

# tar.gz 풀기
tar -xzvf backup.tar.gz

# 특정 위치에 풀기
tar -xzvf backup.tar.gz -C /target/path

# 내용 보기
tar -tzvf backup.tar.gz

# 압축 없이 묶기
tar -cvf backup.tar mydir/

# 압축 없이 풀기
tar -xvf backup.tar

압축#

  • c: create, 새 archive 생성
  • z: gzip 압축, j: bzip2, J: xz
  • v: verbose, 진행 파일 출력
  • f: 파일 이름 지정

풀기#

  • x: extract, 풀기
  • z: gzip 압축, j: bzip2, J: xz
  • v: 진행 출력
  • f: 파일 이름 지정
  • C: 특정 위치에 풀기 (미리 만들어진 폴더에)

RSync#

> rsync -avh --progress source/ target/

# 전체 진행률 중심으로 보고 싶으면:
> rsync -avh --info=progress2 /source/ /backup/

# 대용량이면
> rsync -aHAXh --numeric-ids --info=progress2 source/ target/

# 원본과 대상을 완전히 같게 동기화
> rsync -avh --delete /source/ /backup/

# 특정 파일/디렉터리 제외
> rsync -avh \
  --exclude 'node_modules/' \
  --exclude '*.log' \
  --exclude '.git/' \
  /source/ /backup/
> rsync -avh --exclude-from=exclude.txt /source/ /backup/

# SSH port, sudo 권한 적용
> rsync -aHAXh \
   -e "ssh -p 2222" \
   --numeric-ids --info=progress2 \
   --rsync-path="sudo rsync" \
  /source/ /backup/

#------ ''/' 주의
> ls
/app/data/file1

> rsync -av /app/data/ /backup/data/
/backup/data/file1

> rsync -av /app/data /backup/
/backup/data/file1

PostgreSQL Data Backup Example#

# 1차 사전 복사
> sudo rsync -aHAXh --numeric-ids --info=progress2 \
   --rsync-path="sudo rsync" \
   user@REMOTE_HOST:/var/lib/postgresql/16/main/ \
   /app/postgres16-data/

# PostgreSQL Stop 후 최종 동기화
> sudo rsync -aHAXh --numeric-ids --delete --info=progress2 \
  --rsync-path="sudo rsync" \
  user@REMOTE_HOST:/var/lib/postgresql/16/main/ \
  /app/postgres16-data/

옵션설명#

옵션 의미
-a archive 모드. 권한, 소유자, 시간, 심볼릭 링크 등을 보존
-v verbose. 복사되는 파일 출력
-h human readable. 용량을 보기 좋게 출력
-z 전송 중 압축. 네트워크 느릴 때 유용
--progress 파일별 진행률 표시
--info=progress2 전체 진행률 표시
--delete 원본에 없는 파일을 대상에서도 삭제
--dry-run 실제 복사하지 않고 결과만 미리 보기
--exclude 특정 파일/디렉터리 제외
--include 특정 파일/디렉터리 포함
--numeric-ids 사용자명 대신 UID/GID 숫자로 소유권 보존
-H hard link 보존
-A ACL 보존
-X extended attributes 보존
-e ssh SSH 사용 지정
--partial 중단된 파일 일부를 유지
--append-verify 이어받기 검증
--bwlimit 전송 속도 제한
--checksum 파일 시간/크기 대신 checksum으로 비교