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/

Arch linux 업데이트 후 쉘 실행 시 append_path 실행 실패

/etc/profile.d/perlbin.sh:6: command not found: append_path
/etc/profile.d/perlbin.sh:8: command not found: append_path
/etc/profile.d/perlbin.sh:10: command not found: append_path

2020 년 9 월 말 경부터 쉘 실행시 (bash,zsh) 위 같은 에러가 발생한다면, /etc/profile 업데이트 되었는지 확인할 것. 자신만의 설정을 넣었다면 /etc/profile 파일이 업데이트 안되고 /etc/profile.pacman 에 있어서 append_path 를 못 찾아서 발생하는 건임.

https://bbs.archlinux.org/viewtopic.php?id=259400