find -execdir {} + (plus)를 사용할 때 왜 3번이 아닌 4번의 호출이 발생합니까?

find -execdir {} + (plus)를 사용할 때 왜 3번이 아닌 4번의 호출이 발생합니까?

나는 읽었다여기in 끝까지 파이핑하여 commandin 호출 수를 계산할 수 있습니다.-exec command {} +| wc -l

-execdir비록 이것이 다르다는 것을 알고 있지만 발견된 각 일치하는 하위 디렉터리에 대해 find포함된 하위 디렉터리에서 호출을 실행하기 때문에 command이는 하위 디렉터리에 일치하는 여러 파일이 있는 경우 결국 그렇게 되어야 합니다. 호출 수는 호출 수와 같습니다. 일치하는 하위 디렉터리 및아니요이 하위 디렉터리의 일치하는 파일 수와 일치하는 호출 수는 몇 개입니까?

다음 명령을 실행하면 후자로 끝납니다.

$ find . -name "bob*" -execdir echo {} + | wc -l

매뉴얼 페이지에는 execdir command {} +전자가 해당되어야 한다고 명시되어 있습니다.

-exec작업 과 마찬가지로 +양식은 -execdir일치하는 여러 파일을 처리하기 위한 명령줄을 작성하지만 지정된 호출은 command동일한 하위 디렉터리에 존재하는 파일만 나열합니다.


나는 얻는다 :

./file1inDir1
./file2inDir1
./file3InDir2
./file4InDir3

맨 페이지에 따르면 이것을 예상하면 다음과 같습니다.

./file1inDir1 ./file2inDir1
./file3InDir2
./file4InDir3

답변1

이는 성능 문제입니다 find. findutils버전 4.3.4 에서는해결책사용되는 매개변수의 수는 -execdir ... {} +1개로 제한되어야 합니다. 버전 4.5.9에서는 이 제한사항이 제거되었습니다.

예를 살펴보세요:

$ mkdir -p dir{1..3}
$ touch dir{1..3}/file1 dir2/file{1..3}
$ find
.
./dir1
./dir1/file1
./dir2
./dir2/file1
./dir2/file2
./dir2/file3
./dir3
./dir3/file1

사용시에는 -execdir {} +이 명령을 3번 실행해야 합니다. 두 번째 호출에는 3개의 매개변수가 있어야 합니다.

4.4.2 의 경우 find:

$ find-4.4.2 . -name "file*" -execdir sh -c 'echo "Executing $@ in $(pwd)"' find-sh {} +
Executing ./file1 in /path/to/dir1
Executing ./file1 in /path/to/dir2
Executing ./file2 in /path/to/dir2
Executing ./file3 in /path/to/dir2
Executing ./file1 in /path/to/dir3

4.6.0 의 경우 find:

$ find-4.6.0 . -name "file*" -execdir sh -c 'echo "Executing $@ in $(pwd)"' find-sh {} +
Executing ./file1 in /path/to/dir1
Executing ./file1 ./file2 ./file3 in /path/to/dir2
Executing ./file1 in /path/to/dir3

관련 정보