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 다운로드 순 정렬한 주소.
답글 남기기