mv
를 사용하여 큰 디렉토리를 이동할 때 진행률을 볼 수있는 방법이 있습니까 (%)? gentoo의 cp
명령에는 -g
진행 상황을 보여주는 스위치.
패치 된 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보다 약간 느리지 만 시간이 지남에 따라 측정하고 자신을 결정해야한다는 것입니다.
Shell Script : Shell 스크립트는 진행률 표시 줄을 만들 수도 있습니다. 나는 그물에서 이것을 얼마 전에 발견했고 그 출처를 기억하지 못한다.
#!/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 :
‘bar’-‘cat’= ASCII 진행률 표시 줄 포함)
bar
는 모든 종류의 작업 (cp, tar 등)에 대한 프로세스 표시 줄을 표시하는 작은 셸 스크립트입니다. project homepage. 에서 예제를 찾을 수 있습니다.
또한 본 쉘을 위해 작성되었으므로 어디에서나 근처에서 실행됩니다.
실행중인 명령과 관련된 설명자를 찾고 진행률과 속도를 표시 할 수있는 progress
라는 새 도구가 있습니다. available here
progress -w
실행중인 모든 cp, mv 등의 작업에 대한 통계를 출력합니다.
pipe viewer command 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이며 진행률 표시 줄이 아닌 진행률 만 보여줍니다.
진행률 표시 줄이있는 디렉토리를 이동/복사하지만 터미널이 아닌 GUI를 피하는 것이 목표 인 경우 mc (Midnight Commander)를 사용하는 것이 좋습니다.
내 해결책은 rsync
을 사용하는 것입니다. 디렉토리를 복사하고 성공적으로 복사 한 후 소스 파일을 제거 (따라서 "이동")하고 진행률 보고서를 표시 할 수 있습니다 (특히 부분적으로 복사 된 디렉토리 동기화 및 네트워크 작업).
진행률 보고서와 함께 rsync를 사용하여 디렉토리를 이동하는 방법은 다음과 같습니다.
rsync -aP --remove-source-files $src $dst && rm -r $src
$src
가 not 로 끝나는 지 확인하십시오. 그렇지 않으면 백 슬래시로 끝나지 않습니다. GNU cp
.
rm -r
는 디렉토리가 아닌 각 파일을 성공적으로 복사 한 후에 만 소스 파일을 제거하기 때문에 끝에 --remove-source-files
가 필요합니다. &&
는 rsync가 성공적으로 완료된 경우에만 실행합니다. 편집증 인 경우 find $src -d -exec rmdir {} +
와 같은 일종의 재귀 rmdir
로 대체 할 수 있습니다.
유일한 결함은 -P
옵션이 전체 복사 작업이 아닌 각 파일의 진행률을 표시한다는 것입니다. 작은 파일이 많은 디렉토리를 이동하려는 경우이 방법이 유용하지 않을 수 있습니다. rsync의 최신 개발 버전에는 전체 작업의 진행률을 나타내는 대체 플래그 --info=progress2
가 있습니다.
첫째 : 30 분 이상 컴퓨터를 사용하지 않으려는 경우를 제외하고는 ionice를 사용하지 않고 큰 파일을 복사하지 않습니다.
두 번째 : 모든 파티션이 축소되어 파티션 내 복사에 시간이 걸리지 않습니다. 긴 사본이라면 du -sm
파일과 df -m | grep copy_to_partition
. 그런 다음 얼마나 더 많은 시간이 걸리는지 궁금하다면 df
을 다시 수행하고 파일이 얼마나 복사되었는지 확인하십시오.
진행률 표시 줄은 아니지만 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%
내 민트에서 나는 이것이나 컬 솔루션에 gcp를 사용하고 싶다.
gcp SOURCE DESTINATION
설치해야 할 수도 있습니다 Sudo apt-get install gcp
그리고 진행률 표시 줄에 대한 정보가있는 매우 훌륭하고 훌륭한 작업
읽을 수있는 형식은 다음과 같습니다.
curl -o DESTINATION FILE://source
또한 먼저 설치해야 할 수도 있습니다 Sudo apt-get install curl
mv
및 cp
에 진행률 표시 줄을 추가하는 coreutil 패치를 피하려면 gcp
(Goffi 's CoPier)가 새로운 대안입니다 : http : //wiki.goffi. org/wiki/Gcp/en
재귀에 대한 옵션 -r
및 자세한 정보에 대한 -v
와 함께 cp
와 같은 방식으로 사용합니다.
여러 명령이 동시에 호출 될 때 파일 큐를 사용합니다. 또한 복사 된 파일 이름을 로그에 기록 할 수 있습니다. 자세한 내용은 소스 저장 매뉴얼 페이지 섹션을 참조하십시오.
다음은 gcp
를 시작하기위한 좋은 자습서입니다. http://mylinuxbook.com/gcp-advanced-command-line-file-copier-inspired-by-cp/
사용하다 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를 통한 진행 정보
나는 항상이 답변을 검색하게됩니다. after 'mv'명령을 시작합니다.이 시점에서 다시 시작하고 싶지 않습니다. 이 상황에서 진행 상황을 모니터링하는 매우 간단한 방법 (또는 죽일만한 가치가 있는지 확인하는)은 다음을 실행하는 것입니다.
du -hs /directory/you're/moving/data/to
그러면 디렉토리의 크기 만 인쇄되므로 얼마나 많은 데이터가 복사되었는지 확인하거나 몇 번 실행하여 데이터가 얼마나 빨리 전송되는지 확인할 수 있습니다.
rsmv
이름으로 저장된 다음 스크립트를 사용합니다.
#!/usr/bin/env bash
rsync -aP --remove-source-files "[email protected]" && rm -rf "${@:1:$#-1}"
공백을 사용하여 둘 이상의 소스와 파일 이름을 처리합니다.
$ rsmv source1 source2 source\ 3 "source 4" dest