![grep 결과를 전송하여 찾기](https://linux55.com/image/98728/grep%20%EA%B2%B0%EA%B3%BC%EB%A5%BC%20%EC%A0%84%EC%86%A1%ED%95%98%EC%97%AC%20%EC%B0%BE%EA%B8%B0.png)
다른 이벤트 사이의 일부 파일 이름이 포함된 로그 파일이 있는데 하위 폴더에서 찾아야 합니다. 특정 폴더 및 하위 폴더에 있어야 하는 xml 파일 내의 파일 이름에도 동일한 필요성이 적용됩니다. 로그 파일에 grep을 사용하고 정확한 파일 이름을 추출한 다음 조회에 제공해야 할 것 같습니다. 한 줄에 파일 이름 목록을 쉽게 얻을 수 있지만 find로 작업하도록 하는 것은 정확히 작동하지 않습니다. 인터넷은 그 반대의 답변으로 가득 차 있습니다. grep을 입력한 결과를 찾으세요.
grep -oP '(?<=Some problem with file named ).*pdf(?=\.)' /home/myname/log/myspecificlogfile.log
이 명령의 결과를 xargs에 파이핑하여 살펴보았지만 실제로 존재하지 않는 파일과 실제로 존재하는 파일 모두에서 결과가 나오지 않았습니다. echo 단순화하기 위해 find 매개변수 -ls가 아직 추가되지 않았습니다(하지만 필요합니다).
echo 12345.pdf | xargs -0 -I{} find /home/myname/workfolders/ -name '{}' #Nonexisting pdf
echo 67890.pdf | xargs -0 -I{} find /home/myname/workfolders/ -name '{}' #Existing pdf, no results
폴더 및 하위 폴더에 있는 파일을 찾기 위해 grep 결과를 어떻게 파이프할 수 있습니까?
답변1
나는 그것을 할 것이다:
grep -oP '(?<=Some problem with file named ).*pdf(?=\.)' \
/home/myname/log/myspecificlogfile.log | awk -F / '
ARGIND == 1 {files[$0]; next}
$NF in files' - RS='\0' <(
find /home/myname/workfolders/ -name '*pdf' -type f -print0)
grep
( 및 의 GNU 구현과 , 또는 같은 awk
프로세스 대체를 지원하는 쉘을 가정 ).ksh
zsh
bash
find
예를 들어, 파일 이름이나 ' 를 사용하는 것은 적합하지 않습니다 -name
. 파일 이름당 한 번씩 실행하는 것은 비효율적입니다. 의 호출을 사용하는 솔루션을 생성하더라도 수행 중인 해시 조회보다 여전히 효율성이 떨어질 수 있습니다.*.pdf
?.pdf
find
find
-name a.pdf -o -name b.pdf...
awk
답변2
사용된 다른 변형찾기+그렙
find /home/myname/workfolders/ \
-name '*pdf' -type f -exec grep -qFf \
<(grep -oP '(?<=Some problem with file named ).*pdf?(?=\.)'\
/home/myname/log/myspecificlogfile.log) \
-print
또는 두 개의 명령으로 파이프할 수 있습니다.
find /home/myname/workfolders/ -name '*pdf' -type f |
grep -qFf <(grep -oP '(?<=Some problem with file named ).*pdf?(?=\.)' \
/home/myname/log/myspecificlogfile.log)