find -exec 성능 개선

find -exec 성능 개선

Java 프로그램에 전달할 수 있도록 디렉터리 내의 하위 디렉터리(파일 아님) 목록이 필요합니다. 그래서 저는 이 명령을 사용하여 Linux 상자의 목록을 가져옵니다.

find /some_directory -depth -maxdepth 1 -mindepth 1 -exec basename {} \; > listfile.txt

그런 다음 listfile.txt이를 Java 프로그램에 매개변수로 전달합니다. Java 프로그램 자체에서 목록 디렉토리를 가져오는 데 몇 가지 문제가 있으므로 그렇게 하겠습니다. 하지만 파일 개수가 200,000개를 초과하기 때문에 위 find명령에는 많은 시간(약 35분)이 소요됩니다.

최적화할 수 있습니까? 아니면 더 나은 옵션이 있습니까?

답변1

GNU1을 사용하여 경로가 아닌 파일 이름만 인쇄하려면 다음에서 .explained 로 find바꿀 수 있습니다.-exec basename-printf '%f\n'암소 비슷한 일종의 영양find매뉴얼 페이지:

%에프

모든 선행 디렉터리 파일 이름을 제거합니다(마지막 요소만).

또한, 내부 디렉터리만 출력하려면 다음 -type d옵션을 사용해야 합니다.

find /some_directory -maxdepth 1 -mindepth 1 -type d -printf '%f\n' > listfile.txt

-depth깊이(1)의 파일만 찾고 있으므로 중복됩니다.

-maxdepthGNU 확장이기도 하지만 -mindepth반대로 -printf이제 일부 다른 find구현에도 나타납니다.

답변2

sum 이외의 디렉토리에 항목 목록을 .한 줄에 하나씩 저장하려는 경우 이 명령과 해당 옵션의 목적은 다음과 같습니다.../some_directoryls-A

ls -A /some_directory > listfile.txt

이는 목록을 정렬하는 이점도 있습니다(GNU를 사용하면 ls정렬을 비활성화하는 데 사용할 수 있음 -U).

basename귀하의 경우 파일당 하나의 명령을 실행하기 때문에 이는 매우 비효율적입니다.

관련 정보