PV (파이프 뷰어)를 사용하여 진행률 표시 줄 바꿈


11

내 컴퓨터에 거대한 디렉토리가 있고 모든 루비 파일에서 문자열을 검색해야합니다.

나는 이것을 이렇게 할 수 grep -R "string" *.rb있었지만 : 정말 오래 걸리고 pv (파이프 뷰어)를 사용하여 진행률을 모니터링 할 수있는 진행률 표시 줄을 표시하고 싶습니다 grep.

그러나 나는이 명령에 대해 이해할 수없는 것들이 여전히 있기 때문에이 명령을 어떻게 작성할 수 있는지 잘 모르겠습니다.

누군가 어떤 아이디어를 가지고 있습니까?

답변:


15

pv파이프에서 작동 (명령이 아님)-파이프 라인의 특정 지점을 지나간 데이터 양을 나타내는 볼륨 게이지입니다.
grep 명령은 파이프 라인 이 아닙니다 ( |- 아무것도pipe operator 찾을 수 없습니다) – 단지 하나의 명령 만 수행합니다. pv여기서 당신을 도울 수 없습니다, 당신 grep은 실제로 모든 입력 파일에서 그 일을하고 있다는 것을 믿어야 합니다.

당신은 할 수 찾기, 태양 광 발전, xargs를 & 그렙 (과 함께 뭔가 자갈 find . -name "*.rb" | pv | xargs grep [regex]좋아 보이는 유망한 수 있습니다,하지만 당신은 말할 것 pv얼마나 큰 find가 의미있는 결과를 제공하는 출력입니다.

솔직히 그것은 가치보다 더 많은 일처럼 보입니다. grep을 실행 하고 참을성있게 기다린 다음 출력이 완료되면 처리하십시오.


1
확실히 가능합니다 . 방금 복잡하고 아마도 grep이 끝날 때까지 기다리는 것보다 조립하고 일하는 데 시간이 더 걸릴 것입니다 :-)
voretaq7

1
P : 정말 멋진 조각이 될 수
Cydonia7

4

두 가지 방법 더 :

for file in *.rb; do echo $file; grep "string" $file >> output.txt; done

또는 원래 명령이 실행되는 동안 다른 쉘에서 grep 명령의 pid를 찾은 후 다음을 수행하십시오.

strace -q -s 256 -e trace=open -p [pid] 2>&1 | head

위의 두 가지 모두 grep 명령이 현재 작업중인 파일을 보여줍니다. 다음을 사용하여 총 파일 수를 찾을 수 있습니다.

ls -l *.rb | wc -l

마지막으로 이것을 사용하여 현재 파일이 목록에있는 숫자를 찾으십시오.

ls -l *.rb | grep -n [the current filename]

추신 : 내 대답은 모든 파일이 단일 디렉토리에 있다고 가정합니다. 그렇지 않은 경우, 당신은 사용해야 할 것입니다 find대신 ls하고 *.rbthinice 제안한다.


1
좋은 대안입니다
Cydonia7

1

사용중인 OS가 확실하지 않지만 grep -R "string" *.ext제대로 작동하지 않을 수 있습니다.

다음 find과 함께 사용하는 것이 좋습니다 grep.

find . -type f -name "*.rb" -print0 |xargs --null grep "string"


내가 준 명령은 실제로 Fedora 16에서 작동하지만 더 명확합니다. 감사합니다 !
Cydonia7

1

최신 버전 pv에는 "-d"다른 프로세스의 모든 FD를 볼 수 있는 -Option이 있습니다.

따라서 이론적 pv으로 파이프 역할뿐만 아니라 전체 프로세스의 진행률 표시기 역할을합니다. (예를 들어 Firefox의 PID로 시도하십시오)

위의 문제에 대한 간단한 아이디어는 다음과 같습니다. grep실행 중에 lsof와 함께 사용하십시오 watch.

$ watch -n 1 "lsof | grep -n $PWD"

그렇게하면 grep의 진행 상황을 모니터링 할 수 있습니다.


0

당신은 이미 시도 했습니까

grep -R "string" *.rb | pv

재귀 적이므로 검색해야 할 총 데이터의 비트 수를 모르기 때문에 실제로 작동하는지 여부를 모르겠습니다.


4
-이 그가 원하는 것을 할 것입니다 생각하지 않습니다 pv그는 전체 입력 크기가 지정된 이렇게해도 (grep을의 출력에 운영됩니다 pv그것은 것 - 단지 출력은 파이프의 끝을 나오는 보는 방법 에 따라 -counting bytes.
voretaq7

0

나는 보통 리눅스 시스템에서 proc-filesystem을 사용한다.

ls -al /proc/<pid of grep>/fd

여기에는 grep-invocation이 현재 연 모든 파일이 나열되어 현재 검색 위치에 대한 인상을줍니다.

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