리눅스 찾기 명령-진행 상황 표시


24

리눅스에서 파일을 검색 할 때 어떤 종류의 진행 정보를 표시 할 수있는 방법이 있는지 궁금합니다 find. 나는 종종 그렇게 모든 스크립트가 있습니다. 자신이 큰 디스크에 파일을 검색하고 진행 표시기 어떤 종류의 바처럼, 매우 도움이 될 것입니다 또는 적어도 현재 디렉토리에서 검색을 "발견"찾거나 않는 find일부 후크 지원 ?


답변 주셔서 감사합니다, 나는 모든 솔루션을 확인하고 어느 것이 더 좋은지 결정합니다. 그것이 나에게 달려 있다면 나는 모든 대답을 받아 들인 것으로 표시 할 것입니다.
Vlad Balmos

찾기를 사용하는 검색 기준에 따라 찾기보다 훨씬 빠릅니다.
B14D3

답변:


28

이 트릭으로 현재 폴더를 볼 수 있지만 진행률 표시 줄은 없습니다-죄송합니다.

 watch readlink -f /proc/$(pidof find)/cwd

멋지다. cwd에 액세스하려면 수퍼 유저 권한이 필요합니다. 감사!
Vlad Balmos

완벽하게 작동합니다.
Jesse Glick

8

pv (파이프 뷰어) 라는 작은 유틸리티 도움이 수 있습니다. Peteris Krumins 의 환상적인 요약 에서 :

파이프 뷰어는 파이프 라인을 통한 데이터 진행을 모니터링하기위한 터미널 기반 도구입니다.

pv는 여러 가지 방법으로 사용할 수 있습니다. 여기에서 놀 때, 나는 파이프에 의해 즉시 찾기로 생성 된 출력의 진행 상황을 모니터링하기 위해 넣었습니다 (stdin을 stdout에 건드리지 않아야합니다)

find / -mtime -1h | pv > /dev/null

다음과 같이 출력이 약간 표시됩니다.

6.42MB 0:01:25 [31.7kB/s] [         <=>      ]

(나는 stdout을 / dev / null로 리디렉션하여 출력이 날지 않고 진행률 표시 줄이 실제로 작동하는 것을 볼 수 있습니다. 이것은 찾기 의도가 아니므로 그에 따라 조정하십시오)

나는 이것이 야생에서 얼마나 잘 작동하는지 확실하지 않습니다. 위의 것과 같은 "비싼"찾기 (루트에서 트래버스)는 상당히 잘 작동하는 것으로 보입니다. 디렉토리 트리의 더 깊은 노드에서 더 간단한 명령을 위해 pv가 비참하게 실패했습니다. 이러한 명령은 결과를 즉시 반환하므로 진행률 표시 줄이 여기에있을 수 있습니다.

어쨌든, 놀아서 이것이 필요한 것에서 전혀 효과가 있는지 확인하십시오. 적어도 생각을위한 음식.


진행률 표시 줄에 무엇이 표시됩니까? 어느 쪽도 find없으며, pv그들이 비율을 계산할 수 있습니다 ,, 검색이 얼마나 걸릴지 알 수 없다. pv출력 에서 볼 수있는 것은 검색이 시작된 이후의 시간입니다.
minaev

맞습니다. 나는 어딘가에 pv가 디렉토리 탐색의 진행 상황을 점검 할 수있는 마술이 있다고 생각했습니다 (잘못된). 일정한 속도로 표준 입력이 주어지면 pv는 단순히 진행률 막대를 일정한 주파수로 이동시킵니다. 시도 yes | pv > /dev/null관찰
tcdyl

1
유용한 유틸리티를 위해 +1
Vlad Balmos

심사 진행은 사소한 것이 아닙니다. 페이지를로드하는 웹 브라우저조차 그렇게 할 수 없습니다. 파일 내용으로 파일 크기로 나눌 수 있다고 생각하지만 Unix 스트림의 경우 총 데이터 양이 일반적이라는 것을 알지 못하며이 도구는 파일뿐만 아니라 모든 종류의 스트림 데이터에 유연합니다.
Sridhar Sarnobat

7

오늘 이것을 검색하고 Google을 통해 여기에 도착했습니다. OS X에서 오래 실행되는 찾기가 있었으며 분명히 watch존재하지 않습니다. 여기 또 다른 해결책이 있습니다.

lsof -Fn -a -c find -d cwd +r 10

  • lsof = 열린 파일 목록
  • -Fn= 파일 / 디렉토리 이름 만 표시 ( 'n'문자로 시작), 전체 lsof출력 을 선호하는 경우 생략하십시오.
  • -a= 말 lsof에만 선이 일치 보여 모두 (이 일치하는 라인을 보여줍니다 기본적으로 기준을 어떤 기준)
  • -c find= 이름이 지정된 프로세스에 의해 열린 파일 / 디렉토리 표시 find(실제로 이름이로 시작하는 프로세스 find이지만 대소 문자를 구분하므로 Finder표시되지 않음)
  • -d cwd = FD (filedescriptor) cwd (현재 작업 디렉토리)가있는 행 표시
  • +r 10 = 열려있는 파일을 찾을 수 없을 때까지 10 초마다 출력 표시 (찾기 완료)

디렉토리 find가 10 초마다 처리되고 있음을 보여 주므로 find여전히 작동하는지와 얼마나 진행되었는지 알 수 있습니다.


5

findin 의 병렬 검색의 예가 있습니다 man find. 이를 사용하여 모든 항목에 대해 여러 가지 검사를 수행하고 작동하는 조건에 따라 여러 가지 작업을 수행 할 수 있습니다. 첫 번째 검사는 예를 들어 simple -print일 수 있으므로 모든 이름이 stdout으로 인쇄됩니다. 두 번째 확인은 원하는 것을 수행합니다. 다음과 같은 것 :

find /work \( -fprint /dev/stderr \) , \( -name 'core' -exec rm {} \; \)

두 번째 검사에서 파일 이름도 표시해야하는 경우을 사용하여 파일 이름 중 하나를 stderr로 리디렉션 할 수 있습니다 -fprint /dev/stderr.


나는 이것을 테스트하지 않았지만 올바른 방법이라고 생각합니다.
Rolf

2

AFAIK는 그렇지 않으며 구현하는 것이 쉽지 않습니다.

흠. 아마도 스크립트가 find <target dir> -type d먼저 실행되고 목록을 저장 한 다음 find <list item> -maxdepth 1 <rest of find parameters>for 루프에서 실행하기 전에 각 디렉토리를 에코 합니다.

현재 수행중인 작업을 모호하게 볼 수있는 대가로 / 실적 / 실적 성능 손실을 거래하고 있습니다.


1

이것은 find 에 의해 열린 현재 파일의 목록 이므로 찾기 가 '지금'보이는 것과 동일 합니다.

find는 매 초마다 find가 사용하는 파일 설명의 쿼리 주소로 가벼우 며 find 자체를 방해하지 않습니다 . 또한 원하는 모든 프로그램으로 수행 할 수 있습니다.

# watch -n 1 'ls -l /proc/$(pidof find)/fd | cut -d ">" -f 2 | grep -v /dev/'

grep -v /dev/숨기기 수신 및 콘솔에 데이터를 인쇄하는 데 사용되는 파일입니다 STDOUT, STDIN 및 STDERR를 파일이다.

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