xz: 원본 파일의 수정 시간 유지하며 다른 경로로 압축

for i in $( /usr/local/bin/fd -E '*xz' -E '*zip' -E '*gz' -E '*tgz' -p "./172.16.*" -t f --changed-within '2020-08-17 00:00:00' --changed-before '2020-08-19 23:59:59' ) ;
do if [ -e /data2/$i ]; then
ls -l /data2/$i;
elif [ -e /data2/$i.gz ];
then ls -l /data2/$i.gz ;
else
xz -v -T6 -c "$i" > "/data2/$i.xz";
touch -d "$(date -R -r "$i")" "/data2/$i.xz";
fi;
done

xz 에 ‘-c’ 옵션은 압축 파일을 표준출력으로 보내는 명령. ‘-k’ 이 원본을 유지하지만 다른 경로로 저장할 수 없으니 ‘-c’ 옵션을 쓰면 된다.

생성하고 끝이면 좋겠는데… 만약 파일 수정 시간 기준으로 관리하고 있다면 원본의 수정 시간을 가져와야 한다. 이미 생성된 파일 수정 시간 수정은 ‘touch -d’ 옵션이고, 원본의 시간을 읽어들이는게 ‘date -r’ (‘-R’ 은 시간표기 방법)

참고로 xz 명령 표준 출력이 병렬처리 되기도 하고 안되기도 하는데, CentOS 6 기본 xz 4.999.9 beta 는 표준 출력 압축 시 싱글 스레드로 실행. xz 5 대 버전부터 멀티 스레드로 압축 됨을 확인.

fd 명령은 rust 로 작성된 find 명령. https://github.com/sharkdp/fd 참조. rust 로 작성된 CLI 명령 중 가장 유용하지 않나 싶다. rust command 는 https://news.hada.io/topic?id=2958 참고 (rust command 로 grep, find, du 를 대체 시 멀티 스레드로 실행할 수 있어서 몇 배의 성능 향상을 얻을 수 있다.)

아래는 rust crates 에서 command-line-utilities 다운로드 순 정렬한 주소.

https://crates.io/categories/command-line-utilities?sort=downloads
https://zaiste.net/posts/shell-commands-rust/

게시됨

카테고리

작성자

태그:

댓글

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.