번호순으로 디렉토리 파일 정렬

번호순으로 디렉토리 파일 정렬

이 디렉토리가 있습니다

$ ls
0    2    4    config.yml
1    3    catalog.svg

하위 디렉터리에는 0부터 번호가 매겨집니다. 최대 수량을 확보해야 합니다.

이것을 시도하면 ls | sort -n나는 얻는다.

0
catalogIcon-gitlab.svg
config.yml
1
2
3
4

여기서 무슨 일이 일어나고 있는 걸까요? c는 왜 0과 1사이인가요?

최상위 숫자를 얻으려면 어떻게 명령을 작성해야 합니까?

시스템: 배쉬, 맥OS

답변1

가장 높은 번호의 디렉토리를 얻으려면 다음을 시도하십시오.

max=$(printf "%s\n" */ | sort -n | tail -1)
echo "${max%/}"

답변2

sort -n"문자열 값 기준"으로 정렬합니다. 이 경우 숫자와 문자의 수치 비교를 시도할 때 (ASCII 48) 뒤에 (ASCII 99)를 추가하여 해당 바이트 sort로 대체됩니다 . GNU 정렬 옵션을 사용하면 오류가 발생하는 것을 볼 수 있습니다.memcmpc0--debug

$ ls |sort -n --debug
sort: using ‘en_US.UTF-8’ sorting rules
0
_
_
catalogIcon-gitlab.svg
^ no match for key
______________________
zoo
^ no match for key
___
1
# ... continues ...

Bash 전용 솔루션의 경우 루프를 사용합니다(지시한 대로 디렉토리가 처음부터 시작한다고 가정 0).

highest=-1
for d in *; do [[ -d "$d" ]] || continue; [[ "$d" -gt "$highest" ]] && highest=$d; done
printf '%s\n' "$highest"

답변3

ls기본적으로 이미 사전순으로 정렬되어 있습니다. 이렇게 짧은 형식으로 배열하면 잘못된 순서로 읽는 것입니다. 각 열을 읽고 다음 열을 읽어보세요. 사용된 실제 어휘 순서를 보려면 ls한 줄에 하나의 객체를 출력하도록 하십시오.

$ ls -1
0
1
2
3
4
catalog.svg
config.yml

답변4

어때요? :

ls -1v
0
1
2
3
4
12
23
catalog.svg
config.yml

v는 version정렬 순서를 나타냅니다.

마지막(가장 큰) 숫자를 얻으려면 숫자만 선택하세요.

$ ls -1v | grep -x '[0-9]*'
0
1
2
3
4
12
23

다음을 사용하여 추적하세요.

$ ls -1v | grep -x '[0-9]*' | tail -n 1
23

유일한 bash 솔루션:

$ max=0; for d in */; do d=${d%/}; [[ d -gt max ]] && max=$d; done; printf '%d\n' "$max"
23

관련 정보