답변:
예, 대상 파일과 로컬 파일에서 stat를 실행하고 파일 크기를 가져옵니다.
즉 stat -c "%s" /bin/ls
그리고 두 값을 비교하여 복사 한 데이터의 백분율을 얻습니다.
다음과 같은 매우 기본적인 구현에서 :
function cpstat()
{
local pid="${1:-$(pgrep -xn cp)}" src dst
[[ "$pid" ]] || return
while [[ -f "/proc/$pid/fd/3" ]]; do
read src dst < <(stat -L --printf '%s ' "/proc/$pid/fd/"{3,4})
(( src )) || break
printf 'cp %d%%\r' $((dst*100/src))
sleep 1
done
echo
}
최신 버전의 Mac OS X에서는 CTRL+ T를 눌러 진행 상황을 확인할 수 있습니다 . cp (1) 의 OSX 10.6 매뉴얼 페이지에서 :
"If cp receives a SIGINFO (see the status argument for stty(1)) signal,
the current input and output file and the percentage complete will be
written to the standard output."
Hitting CTRL+ T는 OSX를 포함하여 BSD-ish 시스템에서 SIGINFO로 현재 프로세스를 시그널링하는 것과 같습니다.
이것은 dd (1) 에서도 작동 합니다.
나는 리눅스가이 SIGINFO 메커니즘을 가지고 있다고 생각하지 않으며, cp (1) 에 대한 GNU 매뉴얼 페이지에서 진행 상황을보고하는 데 사용될 수있는 신호에 대해서는 아무것도 보지 못한다 .
mv
것이 살아 있다는 것을 알기에 충분합니다 . 감사!
많은 파일을 복사 du -s /path/to/destination
하거나 find /path/to/destination | wc -l
이미 수행 한 작업에 대한 아이디어를 제공합니다.
lsof -p1234
1234는 프로세스 ID 인에서 어떤 파일을 복사하고 있는지 확인할 수 있습니다 cp
. 많은 시스템에서 pgrep -x cp
라는 모든 실행중인 프로세스의 프로세스 ID를보고합니다 cp
. 주어진 디렉토리 안에있는 파일들이 복사되는 순서는 예측할 수 없기 때문에이 방법은 그다지 유용하지 않을 수 있습니다 (리눅스의 큰 디렉토리 ls --sort=none
에서는 디렉토리 트리를 사용해보십시오 find
).
lsof -p1234
또한 열 cp
에서 현재 파일에 대해 이미 읽고 쓴 바이트 수를 알려줍니다 OFFSET
.
Linux에서는 IO 사용 통계가 있습니다 /proc/$pid/io
(에 대한 cp
프로세스 의 PID 사용 $pidf
). rchar
값 처리는 읽기 바이트의 총 수이고, wchar
프로세스가 작성한 바이트 수이다. 여기에는 파일의 데이터뿐만 아니라 디렉토리의 메타 데이터도 포함됩니다. 해당 수치를 du /path/to/source
(파일 데이터 만 계산하는) 획득 한 대략적인 수치와 비교할 수 있습니다 .
read_bytes
및 write_bytes
전용, 읽기 또는 저장에서 기록 된 내용을 포함 이미 캐시 또는 정지 버퍼 터미널 진단 및 데이터를 제외 즉.
watch lsof -p1234
watch lsof -p`pgrep -x cp`
정확하게 진행 되는 비교적 새로운 도구 (이전의 cv [coreutils viewer]).
무엇입니까?
이 도구는 시스템에서 현재 실행중인 coreutils 기본 명령 (cp, mv, dd, tar, gzip / gunzip, cat 등)을 찾는 Tiny, Dirty, Linux 및 OSX 전용 C 명령으로 설명 할 수 있습니다. 복사 된 데이터의 백분율을 표시합니다.
어떻게 작동합니까?
그것은 단순히 스캔
/proc
흥미로운 명령에 대해 다음 디렉토리에서 찾습니다fd
및fdinfo
열 파일을 찾을 수 및 위치를 추구하는, 가장 큰 파일의 상태를보고합니다.
(리눅스에서)이 내 좋아하는 트릭 중 하나는의 PID 발견하는 것입니다 cp
(사용 과정 ps | grep cp
또는 이와 유사한 것), 다음에보고 /proc/$PID/fd/
하고 /proc/$PID/fdinfo/
.
$ cp -r y z
^Z
$ ls -l /proc/8614/fd
lrwx------ 1 jander jander 64 Aug 2 15:21 0 -> /dev/pts/4
lrwx------ 1 jander jander 64 Aug 2 15:21 1 -> /dev/pts/4
lrwx------ 1 jander jander 64 Aug 2 15:20 2 -> /dev/pts/4
lr-x------ 1 jander jander 64 Aug 2 15:21 3 -> /home/jander/y/foo.tgz
l-wx------ 1 jander jander 64 Aug 2 15:21 4 -> /home/jander/z/foo.tgz
프로세스가 어떤 파일을 열 었는지 보여줍니다. 파일이 얼마나 멀리 있는지 확인하려면 프로세스가 ...
$ cat /proc/8614/fdinfo/3
pos: 105381888
flags: 0500000
pos
파라미터 바이트 판독 (또는 기록) 포인터의 위치이다.
OP는 "cp"명령이 어떻게 진행되고 있는지 확인할 수있는 기능을 구체적으로 언급했지만 다른 유틸리티가이 특정 문제에 더 적합하다고 말해야합니다.
예를 들면 다음과 같습니다.
rsync -avP FROM TO
FROM 파일 / 폴더를 TO 파일 / FOLDER로 복사하는 과정을 보여줍니다.
# rsync -avP Video.mp4 /run/media/user1/3.8G/
sending incremental file list
Video.mp4
565,170,046 100% 51.23MB/s 0:00:10 (xfr#1, to-chk=0/1)
sent 565,308,115 bytes received 134 bytes 5,210,214.28 bytes/sec
total size is 565,170,046 speedup is 1.00
그리고 rsync는 복사되는 양과 전송 속도를 알려줍니다. 동일한 시스템 또는 네트워크에서 단일 파일 또는 폴더에 모두 작동합니다.
rsync
.
이 도구는 현재 시스템에서 실행중인 coreutils 기본 명령 (cp, mv, dd, tar, gzip / gunzip, cat 등)을 찾고 복사 된 데이터의 백분율을 표시하는 Linux 유틸리티 명령입니다.
pipeviewer 를 사용할 수도 있습니다 .
for f in *; do
pv $f > destination/$f
done
사용 pv -d
:
-d PID[:FD], --watchfd PID[:FD]
데이터를 전송하는 대신FD
process 파일 설명자를보고PID
진행 상황을 표시하십시오. […] a 만PID
지정하면 해당 프로세스가 감시되고 열려있는 모든 일반 파일 및 차단 장치에 진행률 표시 줄이 표시됩니다.pv
프로세스 때 프로세스가 종료됩니다PID
종료합니다.
( 소스 )
러닝의 PID cp
( pidof cp
)를 찾으십시오 . 12345라고 가정하겠습니다. 그런 다음 간단히
pv -d 12345
노트:
pv
하는 동일한 사용자 cp
(또는 루트)로 실행하십시오 .cp
현재 작은 파일을 처리하는 경우 출력에 모든 파일이 표시되지 않을 수 있습니다 (작은 파일을 너무 빨리 닫아서 가져 오지 못할 수 있습니다 pv
). 그러나 일부는 나타날 것이므로, 당신은 무엇을 말할 수 있습니다 cp
.pv -d "$(pidof cp)"
작동 할 수 있습니다. 그러나 둘 이상의 cp
실행이 있으면 작동하지 않습니다. 이 pidof -s
최대 하나의 PID에 반환하지만, 당신은 오른쪽에 속할 확신 할 수 없어 cp
많은있을 경우 공정.
while sleep 1 ; do sync ; done
.