nnn: cp/mv 진행 과정 보여주기 및 rsync(plugin) 이용하기.

nnn 에서 파일 복사/이동을 하게 되면, 얼마나 작업이 진행되고 있는지 알 길이 없다. 이건 nnn 이, 이런 작업들을 외부 프로그램(cp, mv)들을 이용하기 때문이다. cp/mv 는 오래된 만큼, 인간을 위한 배려는 별로 없다. 게다가 원 개발팀들도 이를 개선하려는 노력을 하고 있진 않은 모양이다.

The original author sent the patch to the team, that maintains the GNU CoreUtils. They won’t merge this patch, because mv and cp are feature complete.

파일이 작으면 순식간에 작업이 이뤄지니 별 관계가 없지만, 조금 큰 파일이라면, 앞으로 얼마나 더 기다려야 하는지 궁금해지고, 짜증도 슬슬 나게 된다. 이를 해결하고자, nnn 팀은 cp 를 살짝 바꿔버렸다. 근데, 이 방식이 좀 이상하다. 저작권 때문인건지, 새로 코드를 올린게 아니고, 있는 코드에 살짝 패치를 하는 형태를 취했다. 깊은 내막이야 내가 알 수 없지만..

아무튼 그런 배경 하에 탄생한게 바로, advcpmv(Advanced cp/mv)이다. 이는 리눅스에서만 쓸 수 있다고 한다. macOS 에선 복사가 되는 중간에 Ctrl + T 를 눌러서 확인하라는데.. 좀 무식한 방법이다. 대신, Linux/macOS 공통으로 rsync 를 이용할 수도 있다.


advcpmv

이른바 ‘패치’ 이기에, 컴파일을 내가 스스로 해야만 한다. 그 때문에 또 한번 꽃삽질을 했었다.
제작자가 설명을 잘 해놨으니, 그대로 따라하면 된다.

단! 먼저 현재 시스템에 설치된 cp/mv 판본을 확인해야 한다.

$ cp --version                                                                                                              1 ↵
cp (GNU coreutils) 8.30
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Torbjorn Granlund, David MacKenzie, and Jim Meyering.

내 시스템엔 8.30 이 올라와 있다. 따라서, 8.30 용 패치를 받아야 한다.

curl https://raw.githubusercontent.com/jarun/advcpmv/master/install.sh --create-dirs -o ./advcpmv/install.sh && (cd advcpmv && sh install.sh 0.8 8.30)

install.sh 뒤에 0.8 8.30 이 붙은 이유는, 이에 대응하는 파일이 advcpmv-0.8-8.32.patch 이기 때문이다. (github 에 파일이 올라와 있으니, 그걸 보고 적절한 파일을 선택해야 한다.)

8.30 이 아닌, 최신판을 원한다면 뒤에 군더더기(?)를 떼면 된다.

curl https://raw.githubusercontent.com/jarun/advcpmv/master/install.sh --create-dirs -o ./advcpmv/install.sh && (cd advcpmv && sh install.sh)

그리고 이걸, cpg/mvg 로 이름을 바꿔서 /usr/bin/복사하거나, 아니면 Alias 로 만들라고 하는데..
nnn 에서 사용하려면, cpg/mvg 로 이름을 바꿔줘야 한다.

sudo mv ./advcpmv/advcp /usr/local/bin/cpg
sudo mv ./advcpmv/advmv /usr/local/bin/mvg

여기서 끝이 아니다. 이게 적용되게끔 하려면, -r 을 붙여서 실행해야 한다.

$ nnn -r

이제야 비로소 완성.

rsync plugin 사용

cp/mv 패치가 어렵거나 불가능하지만, rsync 는 사용할 수 있다면, rsync 가 더 나은 대안일 수도 있다.
rsync 로 복사를 대치하려면(mv 는 안되는 듯?), rsynccp 라는 플럭인이 필요하다.
플럭인은 따로 따로 설치해도 되는 듯 하지만, 그냥 한꺼번에 해주는게 편하다.

sh -c "$(curl -Ls https://raw.githubusercontent.com/jarun/nnn/master/plugins/getplugs)"

이러면 일련의 파일들이 $HOME/.config/nnn/plugins 에 설치된다. (물론 이 중에 rsynccp 도 있다.)

이 후, 이 rsynccp 를 사용하도록 설정해줘야 하는데, 다른 모든 설정이 그렇듯, 이것도 역시 환경변수로 해야 한다.

export NNN_PLUG='c:rsynccp'

형식은 다음과 같다.

영문자:플럭인 이름

‘영문자’는 단축키 개념으로 쓰이므로, 딱 한글자여야만 한다. 따라서, 어떤 명령이 할당됐는지 알아보기가 좀 어렵다. nnn 실행 중 ? 를 누르면 나오는 도움말에, ‘PLUGIN KEYS’ 항목이 있으니 찾아볼 수는 있지만.. 그래도 좀 번거롭다.

그럼, 실행은 어떻게?
플럭인 실행은 ; 를 누른다. 그리고 설정한 단축키를 눌러주면 된다. 설명서에는 Alt 도 된다고 나와있는데, 적어도 macOS 에선 안된다.

Author: 아무도안

안녕하세요. 글 남겨주셔서 고맙습니다.