![특정 디렉터리에서 특정 콘텐츠가 포함된 모든 *.xml.err 파일을 찾으려면 *.xml 파일을 상위 디렉터리로 이동하고 *.xml.err 파일을 삭제해야 합니다.](https://linux55.com/image/194369/%ED%8A%B9%EC%A0%95%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%EC%97%90%EC%84%9C%20%ED%8A%B9%EC%A0%95%20%EC%BD%98%ED%85%90%EC%B8%A0%EA%B0%80%20%ED%8F%AC%ED%95%A8%EB%90%9C%20%EB%AA%A8%EB%93%A0%20*.xml.err%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%B0%BE%EC%9C%BC%EB%A0%A4%EB%A9%B4%20*.xml%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%83%81%EC%9C%84%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%EB%A1%9C%20%EC%9D%B4%EB%8F%99%ED%95%98%EA%B3%A0%20*.xml.err%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%82%AD%EC%A0%9C%ED%95%B4%EC%95%BC%20%ED%95%A9%EB%8B%88%EB%8B%A4..png)
Linux 쉘 명령을 작성하려고 하는데 여기서 멈췄습니다.
배경은 다음과 같습니다.
시스템이 생성합니다.xml 및.xml.error는 다음에 해당합니다./tmp/A/처리됨,/tmp/A/not_processed,/tmp/B/처리됨,/tmp/B/not_processed목차. 전체 카탈로그가 정의되지 않았습니다. 예를 들어/tmp/C /tmp/D...
아래에서 콘텐츠에 "oracle"이 포함된 모든 *.xml.err 파일을 찾아야 합니다./tmp/A/not_processed그리고/tmp/B/not_processed. 그런 다음 *.xml 파일을 상위 디렉터리로 이동해야 합니다./tmp/A또는/tmp/B그리고 *.xml.err 파일을 삭제하세요.
다음은 문제가 없는 코드입니다.
find /home/tmp -name \*.err -type f -path "*not_processed*" -execdir grep -l -i "oracle" {} \; -execdir sh -c '
for name do
mv "${name%.*}" ".."
rm -rf "$name"
done' sh {} +
찾기 위해 여러 -execdir 인수를 사용하여 -for 루프를 제거하여 성능을 최적화하려고 합니다.
find /home/tmp -name \*.err -type f -path "*not_processed*" -execdir grep -l -i "oracle" {} \; -execdir mv {} .. \; -execdir rm -rf {} \;
그러나 -execdir mv {} .. \;
두 번째 확장 프로그램을 제거할 수 없습니다 .err
. {}는 파일 경로를 포함하는 배열이어야 합니다. 예를 들어, {} 뒤에 ./a.xml.err ./b.xml.err
간단히 추가하려고 했는데 작동했습니다 . 이제 확장자를 추가하는 방법을 알았지 만 여전히 {}의 확장자를 제거하는 중입니다..err
-execdir mv {}.err .. \;
./a.xml.err.err ./b.xml.err.err
.err
.err
미리 감사드리며 귀하의 노고에 감사드립니다.
답변1
각 파일에 대해 새 셸을 생성하고 있습니다.
find
루프의 출력을 read
루프 에 (올바르게) 연결하고 그 안에서 작동하면 어느 정도 성능을 얻을 수 있습니다 .
.err
그렇지 않으면 혼잡한 트리 구조를 크롤링하는 데 비용이 많이 들고 grep할 파일 수가 계속 늘어나는 추가 파일이 누적될 것 같습니다 .
전체적으로 볼 때, 최고의 성능 향상은 원래 문제를 일으킨 응용 프로그램을 수정하는 것입니다.