기능

기능

10001예를 들어 이름 지정 등으로 여러 디렉터리가 있는 경우 vs 를 10025사용할 이유가 있습니까 ?ls 1*/fools 100??/foo

25가 넘으니 주로 속도에 차이가 있는지 궁금합니다.

나는 둘 사이의 사용법 차이를 알고 있습니다. 별표는 더 긴 파일 이름과 일치합니다(예: ) 10001.backup. 그러나 내 규칙을 충족하지 않는 파일이 없다고 가정해 보겠습니다. 뒤에는 차이점이 있나요?

답변1

기능

그들의 의미는 다릅니다. 이것별표0부터 무한대까지의 문자를 일치시킵니다. 이것물음표정확히 한 문자와 일치합니다.

위의 참고자료에서:

* 문자는 와일드카드의 파일 이름 확장을 위한 "와일드카드" 역할을 합니다.

이것? 문자는 와일드카드의 파일 이름 확장자에 대해 단일 문자 "와일드카드" 역할을 합니다.

성능

tl;dr: 성능에는 눈에 띄는 차이가 없습니다.

저는 각각 단일 문자로 이름이 지정된 36개의 하위 디렉터리가 포함된 디렉터리를 사용하여 성능을 테스트했습니다. 하위 디렉터리에는 총 약 70,000개의 파일이 있습니다. 나는 다음을 테스트했습니다.

$ time ls ?/* -d >/dev/null
$ time ls */* -d >/dev/null

나는 각 명령을 10번 번갈아 가며 사용했습니다. 다음은 real초 단위의 결과입니다 .

?       *
0.318   0.326
0.355   0.212
0.291   0.351
0.291   0.265
0.287   0.283
0.362   0.23
0.248   0.33
0.286   0.283
0.293   0.351
0.233   0.352

통계 분석(쌍 t-검정, 양측 검정) 후에 두 값 사이의 성능 차이는 발견되지 않았습니다(p-값 = 0.95).

제도법

편집: 더 많은 샘플

나는 각각 200개의 샘플을 사용하여 위의 분석을 반복하고 다시 테스트를 번갈아 수행했습니다.

$ for i in {1..200}; do time (ls */* -d >/dev/null) 2>> /tmp/time_asterisk; time (ls ?/* -d >/dev/null) 2>> /tmp/time_question_mark; done

이것은 원시 데이터입니다.?그리고*. 이번에도 유의미한 차이(p-값 = 0.55)를 발견하지 못했고 각 테스트에서 분포가 더 유사해 보입니다.

그림 2

답변2

??glob이 존재하거나 다른 긴 파일이 존재할 수 있는 경우 이는 더 구체적입니다 *.

% touch 10001 100dalmations
% ls 100??
10001
% ls 100*
10001  100dalmations
% 

관련 정보