Linux,Unix,BSD

tar 파일 묶을 때, 특정 폴더 및 파일 제외하기

채윤아빠 2023. 1. 10. 09:00
728x90
반응형

개요

"tar" 명령을 이용하여 파일을 묶을 때, 특정 파일이나 폴더들은 제외하고 묶고 싶은 경우가 있는데, 이 때는 어떻게 하면 될지 알아 보겠습니다.

다음과 같은 구조의 소스가 있다고 가정하고, 불필요한 "logs", "video", "pycache" 폴더들을 제외하고 묶는 방법을 알아 보겠습니다.

pi@raspberrypi:~ $ tar cvf tracker.tar.gz tracker/
tracker/
tracker/jpg2avi/
tracker/jpg2avi/create_video.py
tracker/TrackingTools/
tracker/TrackingTools/matching.py
tracker/TrackingTools/tracking_obj.py
tracker/TrackingTools/kalman_filter.py
tracker/TrackingTools/basetrack.py
tracker/TrackingTools/__pycache__/
tracker/TrackingTools/__pycache__/matching.cpython-37.pyc
tracker/TrackingTools/__pycache__/kalman_filter.cpython-37.pyc
tracker/TrackingTools/__pycache__/basetrack.cpython-37.pyc
tracker/TrackingTools/__pycache__/byte_tracker.cpython-37.pyc
tracker/TrackingTools/byte_tracker.py
tracker/Utils/
tracker/Utils/file_logger.py
tracker/Utils/DataSource.py
tracker/Utils/__pycache__/
tracker/Utils/__pycache__/DataSource.cpython-37.pyc
tracker/Utils/__pycache__/visualize.cpython-37.pyc
tracker/Utils/__pycache__/file_logger.cpython-37.pyc
tracker/Utils/visualize.py
tracker/DetectionTools/
tracker/DetectionTools/nms.py
tracker/DetectionTools/demo_process.py
tracker/DetectionTools/preprocess.py
tracker/DetectionTools/__pycache__/
tracker/DetectionTools/__pycache__/demo_process.cpython-37.pyc
tracker/DetectionTools/__pycache__/nms.cpython-37.pyc
tracker/DetectionTools/__pycache__/preprocess.cpython-37.pyc
tracker/video/
tracker/video/vidf1_444.avi
tracker/logs/

불필요한 폴더 제외하고 나열하기

폴더나 파일이 몇 개 없을 경우에는 다음과 같이 묶을 대상들을 그냥 나열하는 방법이 가장 쉽습니다.

pi@raspberrypi:~ $ tar cvf tracker.tar.gz tracker/jpg2avi/ tracker/TrackingTools/ tracker/Utils/ tracker/DetectionTools/
tracker/jpg2avi/
tracker/jpg2avi/create_video.py
tracker/TrackingTools/
tracker/TrackingTools/matching.py
tracker/TrackingTools/tracking_obj.py
tracker/TrackingTools/kalman_filter.py
tracker/TrackingTools/basetrack.py
tracker/TrackingTools/__pycache__/
tracker/TrackingTools/__pycache__/matching.cpython-37.pyc
tracker/TrackingTools/__pycache__/kalman_filter.cpython-37.pyc
tracker/TrackingTools/__pycache__/basetrack.cpython-37.pyc
tracker/TrackingTools/__pycache__/byte_tracker.cpython-37.pyc
tracker/TrackingTools/byte_tracker.py
tracker/Utils/
tracker/Utils/file_logger.py
tracker/Utils/DataSource.py
tracker/Utils/__pycache__/
tracker/Utils/__pycache__/DataSource.cpython-37.pyc
tracker/Utils/__pycache__/visualize.cpython-37.pyc
tracker/Utils/__pycache__/file_logger.cpython-37.pyc
tracker/Utils/visualize.py
tracker/DetectionTools/
tracker/DetectionTools/nms.py
tracker/DetectionTools/demo_process.py
tracker/DetectionTools/preprocess.py
tracker/DetectionTools/__pycache__/
tracker/DetectionTools/__pycache__/demo_process.cpython-37.pyc
tracker/DetectionTools/__pycache__/nms.cpython-37.pyc
tracker/DetectionTools/__pycache__/preprocess.cpython-37.pyc

하지만, "pycache" 폴더의 불필요한 파일들도 포함됩니다.


--exclude 옵션 활용

"--exclude"을 이용하면 지정된 패턴과 일치하는 폴더 및 파일들은 묶을 대상에서 제외됩니다.

아래와 같이 묶을 폴더를 먼저 지정한 후에 "--exclude" 옵션을 주면 다음과 같은 경고가 발생합니다.

pi@raspberrypi:~ $ tar cvf tracker.tar.gz tracker/ --exclude="__pycache__" --exclude="tracker/video"

...

tar: The following options were used after any non-optional arguments in archive create or update mode.  These options are positional and affect only arguments that follow them.  Please, rearrange them properly.
tar: --exclude ‘__pycache__’ has no effect
tar: --exclude ‘tracker/video’ has no effect
tar: Exiting with failure status due to previous errors

"--exclude" 옵션은 묶을 대상들 보다 앞에 적어 주어야만 합니다.

pi@raspberrypi:~ $ tar cvf tracker.tar.gz --exclude="__pycache__" --exclude="tracker/video"  tracker/
tracker/
tracker/jpg2avi/
tracker/jpg2avi/create_video.py
tracker/TrackingTools/
tracker/TrackingTools/matching.py
tracker/TrackingTools/tracking_obj.py
tracker/TrackingTools/kalman_filter.py
tracker/TrackingTools/basetrack.py
tracker/TrackingTools/byte_tracker.py
tracker/Utils/
tracker/Utils/file_logger.py
tracker/Utils/DataSource.py
tracker/Utils/visualize.py
tracker/DetectionTools/
tracker/DetectionTools/nms.py
tracker/DetectionTools/demo_process.py
tracker/DetectionTools/preprocess.py
tracker/logs/

"--exclude" 옵션을 줄 때 다음과 같이 "*" 패턴 없이 "/"로 시작하거나 끝나는 옵션값은 원래 의도와는 다르게 제외하고자 했던 파일들이 걸러지지 않습니다.

pi@raspberrypi:~ $ tar cvf tracker.tar.gz \
    --exclude="/__pycache__" \
    --exclude="tracker/video" \
    tracker/
tracker/
tracker/jpg2avi/
tracker/jpg2avi/create_video.py
tracker/TrackingTools/
tracker/TrackingTools/matching.py
tracker/TrackingTools/tracking_obj.py
tracker/TrackingTools/kalman_filter.py
tracker/TrackingTools/basetrack.py
tracker/TrackingTools/__pycache__/
tracker/TrackingTools/__pycache__/matching.cpython-37.pyc
tracker/TrackingTools/__pycache__/kalman_filter.cpython-37.pyc
tracker/TrackingTools/__pycache__/basetrack.cpython-37.pyc
tracker/TrackingTools/__pycache__/byte_tracker.cpython-37.pyc
tracker/TrackingTools/byte_tracker.py
tracker/Utils/
tracker/Utils/file_logger.py
tracker/Utils/DataSource.py
tracker/Utils/__pycache__/
tracker/Utils/__pycache__/DataSource.cpython-37.pyc
tracker/Utils/__pycache__/visualize.cpython-37.pyc
tracker/Utils/__pycache__/file_logger.cpython-37.pyc
tracker/Utils/visualize.py
tracker/DetectionTools/
tracker/DetectionTools/nms.py
tracker/DetectionTools/demo_process.py
tracker/DetectionTools/preprocess.py
tracker/DetectionTools/__pycache__/
tracker/DetectionTools/__pycache__/demo_process.cpython-37.pyc
tracker/DetectionTools/__pycache__/nms.cpython-37.pyc
tracker/DetectionTools/__pycache__/preprocess.cpython-37.pyc
tracker/logs/

"--exclude" 옵션을 줄 때 다음과 같이 "{ 'exclude1', 'exclude2', 'exclude3' }"과 같이 여러 파일명을 한꺼번에 넣어 줄 수도 있습니다. 이 때 주의할 점은 폴더명 등은 안된다는 점입니다.

그리고 또 하나 주의해야할 점은 "--exclude=" 옵션값은 파일명을 우선 적고, "*"가 적용된 폴더는 가장 나중에 적어야 한다는 점입니다.

pi@raspberrypi:~ $ tar cvf tracker.tar.gz --exclude={"tracker/video/vidf1_444.avi","*/__pycache__*"}  tracker/
tracker/
tracker/jpg2avi/
tracker/jpg2avi/create_video.py
tracker/TrackingTools/
tracker/TrackingTools/matching.py
tracker/TrackingTools/tracking_obj.py
tracker/TrackingTools/kalman_filter.py
tracker/TrackingTools/basetrack.py
tracker/TrackingTools/byte_tracker.py
tracker/Utils/
tracker/Utils/file_logger.py
tracker/Utils/DataSource.py
tracker/Utils/visualize.py
tracker/DetectionTools/
tracker/DetectionTools/nms.py
tracker/DetectionTools/demo_process.py
tracker/DetectionTools/preprocess.py
tracker/video/
tracker/logs/

참고자료