10001
예를 들어 이름 지정 등으로 여러 디렉터리가 있는 경우 vs 를 10025
사용할 이유가 있습니까 ?ls 1*/foo
ls 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
??
glob이 존재하거나 다른 긴 파일이 존재할 수 있는 경우 이는 더 구체적입니다 *
.
% touch 10001 100dalmations
% ls 100??
10001
% ls 100*
10001 100dalmations
%