답변:
패치 된 cp 및 mv를 빌드 한 다음 둘 다 -g 스위치를 지원하여 진행률을 표시 할 수 있습니다. 이 페이지 에는 지침과 패치가 있습니다 . 그러나 : 페이지에서 지시합니다
$ sudo cp src/cp /usr/bin/cp
$ sudo cp src/mv /usr/bin/mv
원래 cp 및 mv를 덮어 씁니다. 여기에는 두 가지 단점이 있습니다. 첫째, 업데이트 된 coreutils 패키지가 시스템에 도착하면 덮어 씁니다. 둘째, 패치 된 버전에 문제가 있으면 표준 cp 및 mv에 의존하는 스크립트가 중단 될 수 있습니다. 차라리 이런 식으로 뭔가를하고 싶습니다 :
$ sudo cp src/cp /usr/local/bin/cpg
$ sudo cp src/mv /usr/local/bin/mvg
파일을 사용자가 컴파일 한 프로그램을위한 / usr / local / bin으로 복사하고 다른 이름을 지정합니다. 따라서 진행률 표시 줄을 원할 때 mvg -g bigfile /mnt/backup
일반적으로 mv 를 말하고 사용합니다.
또한 진행률 표시 줄 alias mvg="/usr/local/mvg -g"
을 말하고 mvg bigfile /mnt/backup
직접 가져 오기 만하면됩니다.
더 간단한 솔루션이있을 때 coreutil에서 바이너리를 덮어 쓰는 아이디어가 마음에 들지 않으므로 여기에 내 것이 있습니다.
rsync : Rsync는 파일을 복사 -P
하고 진행률 표시 줄에 대한 스위치가 있습니다. 따라서 rsync를 설치 한 경우 쉘 도트 파일에 간단한 별칭을 사용할 수 있습니다.
alias cp='rsync -aP'
단점은 rsync가 cp보다 약간 느리지 만 시간이 지남에 따라 측정하고 자신을 결정해야한다는 것입니다.
셸 스크립트 : 셸 스크립트는 진행률 표시 줄을 만들 수도 있습니다. 나는 그물에서 이것을 얼마 전에 발견했고 그 출처를 기억하지 못한다.
#!/bin/sh
cp_p()
{
strace -q -ewrite cp -- "${1}" "${2}" 2>&1 \
| awk '{
count += $NF
if (count % 10 == 0) {
percent = count / total_size * 100
printf "%3d%% [", percent
for (i=0;i<=percent;i++)
printf "="
printf ">"
for (i=percent;i<100;i++)
printf " "
printf "]\r"
}
}
END { print "" }' total_size=$(stat -c '%s' "${1}") count=0
}
이것은 다음과 같습니다
% cp_p /home/echox/foo.dat /home/echox/bar.dat
66% [===============================> ]
바 :
'bar'-ASCII 진행률 표시 줄이있는 'cat'
bar
모든 종류의 작업 (cp, tar 등)에 대한 프로세스 표시 줄을 표시하는 작은 쉘 스크립트입니다. 프로젝트 홈페이지 에서 예제를 찾을 수 있습니다 .
또한 본 쉘을 위해 작성되었으므로 어디에서나 근처에서 실행됩니다.
bar
mv
아직 랩핑하지 않습니다 .
rsync
대체하지 않습니다 mv
이 같은 기록 중 복사 파일 시스템에 빠르게 복사에 관해서 특히, 완전히 (영업 이익에 대한 요구하고있다) btrfs
.
라는 새로운 도구있다 progress
실행중인 명령에 관련된 설명을 찾아 진행 상황과 속도를 표시 할 수 있습니다 :
가능 여기에
progress -w
실행중인 모든 cp, mv 등의 작업에 대한 통계를 출력합니다.
progress
설치 후 간단히 입력하면 mv
현재 대기중인 명령에 대한 진행률이 표시 됩니다. 감사!
sudo
(동일한 사용자) watch
. 2 초마다 무슨 일이 일어나고 있는지 말할 수도 있습니다 .watch progress -w
watch progress -w
progress -m
파이프 뷰어 명령 pv
을 사용 하여 진행률 표시 줄을 표시 할 수 있습니다 .
pv /original/file > /new/file
나는 종종 (결합 탑재 된 네트워크 파일 시스템을 통해 큰 파일을 복사하려면이 옵션을 사용 gzip
하고 tar
). 단점은 디렉토리가 아닌 하나의 파일 만 복사 할 수 있다는 것 입니다. 그리고 당신은 새 파일에 이름을 주어야합니다, 당신은 단지 같은 대상 디렉토리를 줄 수 없습니다 cp
. 그러나 복사는 pv
목적 이 아닙니다 . 이 도구는 강력한 도구이며 파일 복사 이상의 기능을 수행합니다. 의 더 많은 예는 홈페이지를 참조하십시오 pv
.
더 나은 옵션은을 사용하는 것 rsync -aP
입니다. 당신이 원하는 경우 mv
대신, 플래그를 추가합니다 --remove-source-files
. .bashrc
명령을 자주 사용하려면 이것을 추가하십시오 .
alias rscp='rsync -aP'
alias rsmv='rsync -aP --remove-source-files'
여기의 단점은 rsync이며 진행률 표시 줄이 아닌 진행률 만 보여줍니다.
tar cf - source-dir | pv | tar xf - -C out-dir
전체 디렉토리의 처리량을 제공합니다. 크기를 알고 -s
pv로 전달 하면 진행률을 높일 수 있습니다.
내 해결책은을 사용하는 것 rsync
입니다. 디렉토리를 복사하고 성공적으로 복사 한 후 소스 파일을 제거 (따라서 "이동")하고 진행률 보고서를 표시 할 수 있습니다 (특히 부분적으로 복사 된 디렉토리 동기화 및 네트워크 작업).
진행률 보고서와 함께 rsync를 사용하여 디렉토리를 이동하는 방법은 다음과 같습니다.
rsync -aP --remove-source-files $src $dst && rm -r $src
확인 $src
않습니다 하지 , 그렇지 않으면 당신은 GNU보다 다른 의미를 얻을 것이다, 백 슬래시로 끝 cp
.
rm -r
때문에 말은 필요 --remove-source-files
하나 하나가 성공적으로 디렉토리를하지 복사 한 후에 만이 소스 파일을 제거합니다. 는 &&
rsync를 성공적으로 완료 경우에만 실행을 확인합니다. 당신이 편집증 환자 인 경우에, 당신은 재귀 어떤 종류로 교체 할 수 있습니다 rmdir
, 같은find $src -d -exec rmdir {} +
유일한 결함은 -P
옵션이 전체 복사 작업이 아닌 각 파일의 진행률을 표시 한다는 것 입니다. 작은 파일이 많은 디렉토리를 이동하려는 경우이 방법이 유용하지 않을 수 있습니다. rsync의 최신 개발 버전 --info=progress2
에는 전체 작업의 진행률을 나타내는 대체 플래그 가 있습니다.
에 진행 표시 줄을 추가하는 패치 coreutil 방지하려면 mv
및 것은 cp
, gcp
(Goffi의 복사기) 새로운 대안 : http://wiki.goffi.org/wiki/Gcp/en
재귀 및 자세한 cp
옵션과 동일한 방식으로 사용합니다 .-r
-v
여러 명령이 동시에 호출 될 때 파일 큐를 사용합니다. 또한 복사 된 파일 이름을 로그에 기록 할 수 있습니다 . 자세한 내용 은 소스 저장 매뉴얼 페이지 섹션을 참조하십시오.
다음은 시작하기에 좋은 자습서입니다 gcp
. http://mylinuxbook.com/gcp-advanced-command-line-file-copier-inspired-by-cp/
첫째 : 30 분 이상 컴퓨터를 사용하지 않으려는 경우를 제외하고는 ionice를 사용하지 않고 큰 파일을 복사하지 않습니다.
두 번째 : 모든 파티션이 축소되어 파티션 내 복사 시간이 걸리지 않습니다. 그것이 긴 사본이라면 나는 du -sm
파일을 처리 df -m | grep copy_to_partition
합니다. 그런 다음 얼마나 많은 시간이 걸리는지 궁금하다면 df
다시하고 파일이 얼마나 복사되었는지 확인하십시오.
내 민트에서 나는 이것 또는 컬 솔루션에 gcp를 사용하고 싶다 (정말 멋지다)
gcp SOURCE DESTINATION
설치해야 할 수도 있습니다 sudo apt-get install gcp
그리고 진행률 표시 줄에 대한 정보가있는 매우 훌륭하고 훌륭한 작업
읽을 수있는 형식은 다음과 같습니다.
curl -o DESTINATION FILE://source
또한 먼저 설치해야 할 수도 있습니다 sudo apt-get install curl
gcp
파일 이동을 지원하지 않습니다. 즉, 성공적인 복사 후 소스 파일을 수동으로 제거해야합니다.
이렇게하면 진행률 표시 줄을 제공하지만, 공격하지 않는 CTRL-T
당신은 보내드립니다 SIGINFO
에 mv
가에 작동하고 파일과 얼마나 멀리 따라 그것이 그 과정에서 어떤보고 할 것이다. 대용량 파일 전송에는이 기능을 사용하는 것이 매우 편리하며 여러 개의 작은 파일 전송에는 유용하지 않을 수 있습니다.
빠른 예 :
mv 135/61 /Volumes/Jules/135/
# hit C-t
load: 1.08 cmd: cp 35470 uninterruptible 0.00u 0.04s
135/61/1/1-s2.0-S006738-main.pdf -> /Volumes/Jules/135/61/1/1-s2.0-S006738-main.pdf 68%
INFO: unknown signal; killall -l lists signals.
SIGINFO가 표준 POSIX가 아닌 일부 BSD에만 있다고 생각합니다.
mv -v
이동 된 파일 당 한 줄 pv -l
을 인쇄하고 줄 수 (실제 파일 수)를 기준으로 진행률 을 인쇄하는 데 사용 합니다 .
필요합니다 pv
(파이프 뷰어) : http://www.ivarch.com/programs/pv.shtml
mv -v sourcedir targetdir | pv -l -s filecount > logfile
파일 수를 얻으려면 다음 명령을 사용하십시오.
find sourcedir | wc -l
이 명령은 복사 된 파일 수를 기준으로 진행 정보를 표시합니다. 작은 파일이 많을 때 가장 효과적입니다. 거대한 파일이 몇 개만 있으면 재미가 없을 것입니다.
그 주 mv
빨리해야 동일한 파티션에. mv
다른 파티션에 대해서는 cp source target
뒤에 나오는 것과 동일 합니다 rm source
. 다음은 진행 정보가있는 디렉토리를 복사하는 두 가지 명령입니다.
복사 된 파일 수를 기준으로 진행 상황을보고하려면 :
cp -av sourcedir targetdir | pv -l -s filecount > logfile
복사 된 바이트를 기준으로 진행 상황을보고하려면 :
tar c sourcedir | pv -s size | tar x -C targetdir
자세한 내용은 여기를 참조하십시오 : 디렉토리 복사를 위해 pv를 통한 진행 정보