우편 번호를 사용할 때 명령 줄을 범람하지 않고 전반적인 진행 상황을 표시하려면 어떻게합니까?


25

고정 길이 진행률 표시 줄, 파일 또는 바이트 수 또는 남은 예상 시간을 보여주는 타이머가 이상적입니다.

zip의 표준 동작은 처리 된 모든 파일에 대해 한 줄을 인쇄하는 것으로 보이지만 수천 개의 파일을 압축 할 때 해당 정보가 과부하되는 것을 원하지 않습니다. 얼마나 오래 걸릴지 추측하고 싶습니다.

나는 시도 -q( --quiet와 함께) 옵션을 -dg( --display-globaldots)하지만 단지 홍수 점의 여러 라인 표준 출력 및 유용한 표시를 제공 없는지 확인합니다.

-qdgds 10m맨 페이지에서 언급 한대로 시도했지만 동일한 결과를 얻었습니다.

그런 다음 -db( --display-bytes) 및 -dc( --display-counts) 을 시도했지만 전역 옵션이없는 것이므로 모든 파일 이름에 대해 다시 인쇄합니다.

마지막으로 -qlike와 함께 시도했지만 -qdbdc아무것도 출력하지 않습니다.

유감스럽게도 info-zip 사이트에서 "보관 작업을 마치는 데 걸리는 예상 시간을 표시해야" 하는 -de( --display-est-to-go) 옵션 에 대한 매뉴얼 페이지를 찾았습니다 .

그것은 내가 원하는 것과 정확히 같지만 문제는 내 버전에 zip해당 기능이 없다는 것입니다. 우분투 14.04.1 64 비트, bash-4.3.30 (1) 및 zip-3.00을 사용하고 있습니다. Wikipedia에 따르면 이것은 zip의 최신 안정 릴리스입니다.

info-zip sourceforge 페이지에 릴리스되지 않은 베타 버전이 있지만 베타 릴리스에 내 데이터를 위임하지 않습니다.


출력을 파일에 로그하고이를 사용하여 고급 정보를 제공하십시오 tee. 지퍼를 시작하기 전에 파일의 총 수를 확인 (과 ls또는 find -type f)하고 압축하는 동안, 이미와 (이 처리 된 파일의 라인 수의 로그 파일을 읽을 grep권리 라인이보고하기를, 그리고 wc -l라인에 대한 count), 따라서 높은 수준의 정보는 "234/76438 처리 된 파일"과 같은 것을 표시합니다.
물병 자리 힘

총 파일 크기를 고려하고 이미 처리 된 파일의 크기를 확인하여 타이밍을 작업 할 수 있습니다. 그러나 ... 같은 크기의 파일도 처리하는 데 다른 시간이 걸리므로 항상 거친 추측이 될 것입니다.
Aquarius Power

ZIP 파일을 만들 때 stdin을 사용할 수 있는지 모르겠지만 gzip이 괜찮다면 다음과 같이 할 수 있습니다pv /path/to/file | gzip > /path/to/file.gz
DopeGhoti

답변:


11

zip데이터를 표준 출력으로 압축 할 수 있습니다. 따라서 다음과 같은 다른 도구와 결합 할 수 있습니다 pv.

zip -qr - [folder] | pv -bep -s $(du -bs [folder] | awk '{print $1}') > [file.zip]

-bep편의상 옵션 중 하나를 제거하십시오 .


감사합니다! Mac에서이 작업을 수행합니다 (brew install pv, brew install coreutils 및 du를 gdu로 바꿉니다).
Jeff

6

7z를 사용해도 괜찮다면 :

7z a output.zip folder/

그러면 다음과 같은 진행 표시 줄이 나타납니다.

Open archive: test.zip
--
Path = test.zip
Type = zip
Physical Size = 232039663

Scanning the drive:
3 folders, 2401 files, 238122225 bytes (228 MiB)

Updating archive: test.zip

Items to compress: 2404

 16% 279 U folder/file.txt  

2

나는 다음을 성공적으로 사용했다.

zip -r [target_zip] [folder_to_zip] 2>&1 | 
pv -lep -s $(ls -Rl1 [folder_to_zip] | egrep -c '^[-/]') > /dev/null

그리고 이것은 아래에 설명되어 있습니다 :

zip -r [target_zip] [폴더 _to_zip] 2> & 1 |

stderr을 stdout으로 리디렉션하는 [folder_to_zip] 파일을 [target_zip] 파일에 반복적으로 압축합니다. stderr에는 처리중인 각 파일 및 디렉토리에 대해 한 줄 이 포함 됩니다.

pv -lep -s $ (ls -Ral1 [folder_to_zip] | egrep -c '^ [-/]')> / dev / null

zip에서 출력되는 파일 이름을 가진 행을 pv에 파이프하십시오. pv는 라인 모드에서 작동합니다 (라인을 기준으로 계산 진행률 및 크기도 예상되는 라인 수입니다 -PV 매뉴얼 페이지 -l 옵션 참조 ).

예상되는 총 줄 크기는 [folder_to_zip]을 재귀 적으로 나열 (ls)하고 '-'또는 'd'로 시작하는 줄, 즉 모든 파일과 디렉토리를 계산하여 수집합니다 (디렉토리는 '/'로 시작 함을 기억하십시오) .

위의 내용은 모든 파일과 디렉토리가 처리 될 때 100 %에 도달하므로 정확한 완료율을 제공합니다.

pedroapero의 대답에 대한 문제는 처리 (압축되지 않은) 처리 할 총 바이트 수에 대해 처리 된 (압축 된) 바이트 수에 대해 진행률이 계산된다는 것입니다. 결과적으로 프로세스는 약 30 %에서 완료됩니다 (압축률에 따라 다름).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.