*.xml
서버의 모든 파일을 찾는 명령이 있습니다 . 나는 다음을 사용하고 있습니다 :
find -type f -exec grep -il "xml" {} \;
이것은 훌륭하지만 아마도 서버에 이러한 파일이 수천 개 있을 것이고 내 창이 가득 찼을 것입니다.
나는 보고서를 생성하여 서버 어딘가에 저장하거나 이메일로 보낼 수 있기를 원합니다.
또한 이 보고서를 실행할 때 지난 5일만 확인하도록 지정하고 싶습니다.
답변1
먼저 파일을 어딘가에 저장해 보겠습니다.
귀하의 명령에 따라:
find -type f -exec grep -il "xml" {} \;
그리고 다음 내용을 읽어보세요:쉘의 제어 및 리디렉션 연산자는 무엇입니까?거기에 다음과 같이 적혀 있습니다.
>
: 명령의 출력을 파일로 보냅니다.
다음과 유사하게 명령을 작성하십시오.
find -type f -exec grep -il "xml" {} \; > /tmp/report.txt
이 기회를 빌어 현재 명령에 대한 find
몇 가지 조정 사항을 제안하겠습니다.
개인 취향(또는 내 레거시 메모리)일 수도 있지만 저는 다음과 같이 시작 디렉터리를 지정하는 것을 좋아합니다
find
.find / -type f ....
이렇게 하면 명령이나 스크립트를 어디에서 실행하더라도 항상 예상한 결과가 생성됩니다.
- 명령 은 "*.xml" 파일을 검색하는 대신
find
(대소문자 구분) 문자열 "xml"이 포함된 파일을 검색합니다. 콘텐츠 검색을 원하시면 이 단락 읽기를 중단하세요. "xml"이 포함된 파일을 정말로 찾고 싶다면파일 이름find / -type f -iname '*xml*'
--where는 대소문자를 구분하지 않는 "xml"을 포함하는 파일 이름과 일치하도록iname
지시합니다 .find
다음 위치에 있는 "xml"에만 관심이 있는 경우끝파일 이름 앞에 마침표를 추가하려면find / -type f -iname '*xml'
또는 를 사용하세요 .... -iname '*.xml
2a. 만약 당신이예파일의 내용을 검색하려면 일반적인 경우를 grep
grep에게 고정 문자열을 검색하고 있음을 알려주는 것으로 변경하는 것이 좋습니다 ... grep -Fil xml ...
.
지난 5일 이내에 수정된 파일만 보고하도록 find에 지시하려면 를 사용하십시오
-mtime -5
.Linux에 Q 태그를 지정했으므로 GNU를 찾았다고 가정하겠습니다(
man find
그리고 확인하려면 설명에서 "GNU"를 찾으세요). 이 경우find
다음 구문을 사용하여 각 exec에 여러 파일을 전달하도록 지시하여 프로세스 속도를 높일 수 있습니다.find / -type f -mtime -5 -exec grep -Fil xml {} + > /tmp/report.txt