명령의 특정 출력 줄을 억제합니다.

명령의 특정 출력 줄을 억제합니다.

검색하고 싶어요chrom/var디렉토리 에 . 그래서 나는 이것을 실행했다.

$ ls -R | grep "^chrom"

놀랍게도 그것은 보여줍니다이것. 다음과 같은 출발선은 거의 없습니다.

amit@ElMaverick:/var$ ls -R | grep "^chromium"

chromium-browser_55.0.2883.87-0ubuntu0.16.04.1263_amd64.deb
chromium-browser-l10n_55.0.2883.87-0ubuntu0.16.04.1263_all.deb
chromium-codecs-ffmpeg-extra_55.0.2883.87-0ubuntu0.16.04.1263_amd64.deb
ls: cannot open directory './cache/apt/archives/partial': Permission denied
ls: cannot open directory './cache/cups': Permission denied
ls: cannot open directory './cache/ldconfig': Permission denied
chromium-browser_chromium-browser.png
chromium-browser_chromium-browser.png
chromium-bsu_chromium-bsu.png
chromium-browser_chromium-browser.png
ls: cannot open directory './lib/apt/lists/partial': Permission denied
ls: cannot open directory './lib/bluetooth/78:0C:B8:46:10:D5': Permission denied
chromium-browser.conffiles
chromium-browser-l10n.list
chromium-browser-l10n.md5sums
chromium-browser.list
chromium-browser.md5sums
chromium-browser.postinst
chromium-browser.prerm
chromium-codecs-ffmpeg-extra.list
chromium-codecs-ffmpeg-extra.md5sums
ls: cannot open directory './lib/mysql': Permission denied
ls: cannot open directory './lib/mysql-files': Permission denied

출력에서 이러한 줄을 보고 싶지 않습니다.

ls: cannot open directory

그래서 두 가지 질문이 있습니다.

  1. 오류 없이 해당 행만 필터링하는 방법은 무엇입니까?
  2. 특정 출력 라인을 억제하는 방법이 있습니까?

이 문제뿐만 아니라 문제에 대한 일반적인 해결책을 제시해 주십시오.

답변1

  1. 표준 오류 스트림을 ls다음으로 리디렉션합니다 /dev/null.

    ls -R 2>/dev/null | grep '^chrom'
    
  2. 추가 grep 작업:

    ls -R 2>/dev/null | grep '^chrom' | grep -v 'some additional pattern'
    

(find왜 `ls`를 구문 분석하지 *않나요*?):

find . -name 'chrom*' ! -name 'some additional pattern' 2>/dev/null

find파일 이름 와일드카드 패턴을 사용하는 동안 grep정규식을 사용하십시오 . 또한 파일( ) 또는 디렉터리( ) 등을 find구체적으로 찾을 수도 있습니다 .-type f-type d

find . -type f -name 'chrom*' ! -name 'some additional pattern' 2>/dev/null

명령의 각 부분은 find발견된 경로 이름에 대한 "테스트"와 같습니다. -type파일 형식에 대해 테스트하고 -name경로의 최종 파일 이름 부분에 대해서도 테스트합니다. 테스트는 논리적으로 AND로 연결됩니다( -o사용되지 않는 한). 느낌표는 테스트의 의미를 반전시킵니다.

답변2

더 나은 사용다음과 같은 작업에 더 적합한 제품군입니다.

단순 사용자로서(루트가 아닌 사용자로서 파일을 읽을 수 있는 권한이 없기 때문에):

$ find /var -type f -name 'chrom*' 2>/dev/null

또는 루트로서:

# find /var -type f -name 'chrom*'

특정 오류를 필터링하고 싶은 경우, 사용:

command 2> >(grep -v 'specific error')

경고하다

출력을 구문 분석하지 마십시오 ls!

관련 정보