가장 높은 번호의 폴더를 얻는 방법

가장 높은 번호의 폴더를 얻는 방법

4개의 하위 디렉터리를 포함하는 상위 디렉터리가 있다고 가정합니다. 각 하위 디렉터리에는 동일한 콘텐츠가 포함되어 있습니다. 또한 각 하위 디렉터리 이름은 정수이며, 정수가 클수록 디렉터리와 해당 내용이 최신 버전입니다.

예:

상위 디렉터리/
-> 1/
-> 2/
-> 6/
-> 3/

경로에 지정된 가장 큰 하위 디렉터리를 가져오는 방법은 다음과 같습니다.

/user/mosawi/parentdir/${NEWEST}/payload.gzip

이는 다음과 같이 평가됩니다. /user/mosawi/parentdir/6/payload.gzip

답변1

최신 카탈로그가 필요하시죠? 이제 숫자 장난은 그만치고 zsh이렇게 해보자:

NEWEST=(/user/mosawi/parentdir/*(/om[1]))
NEWESR=${NEWEST}/payload.gzip

비결은 glob 한정자를 사용하여 정렬하는 것입니다()목차(/) 시간 변경() 그리고 첫 번째 ([1]).

답변2

숫자의 자릿수가 동일한 경우 일반적인 정렬 순서를 사용해야 합니다. 그러면 배열을 이름으로 채우고 마지막 요소를 얻을 수 있습니다.

$ mkdir -p parentdir/{1,2,6,3}
$ A=(parentdir/*)              # fill an array with the names
$ echo "${A[-1]}"              # print the last member of the array
parentdir/6
$ echo "${A[-1]##*/}"          # remove everything up to last / 
6

단, 숫자가 다를 경우에는 적용되지 않습니다(순서는 1, 13, 2, ...). 이제 수동으로 최대값을 찾아보겠습니다.

$ mkdir -p parentdir/{1,2,6,3,13}
$ max=0;                       # assuming they're non-negative integers!
$ for x in parentdir/* ; do 
    n=${x##*/};                # take just the number so that comparisons work 
    [ "$n" -gt "$max" ] && max=$n 
  done
$ echo "$max" 
13

전자의 방법은 훨씬 더 간단하며 가능하다면 고정 길이에 앞에 0을 붙여 이름을 만드는 것을 고려해 볼 가치가 있습니다.

답변3

mkdir -p parentdir/{1,2,6,3,13}

그냥 ls, 정렬되지 않음:

ls parentdir/
1  13  2  3  6

이제 정렬:

ls parentdir/ -v
1  2  3  6  13

이제 마지막 항목을 정렬하고 가져옵니다.

ls parentdir/ -v | tail -n1
13

장점: 루프 없음, 단일 라인

반대: 외부 명령 호출

답변4

디렉터리 이름의 순서가 올바르게 지정되었다고 가정합니다(즉, 동일한 자릿수가 포함되어 있고 디렉터리에 숫자가 아닌 이름이 없음).

newest="$(printf '%s\n' /user/mosawi/parentdir/* | tail -n 1)"

파일은 "$newest/payload.gzip".

또 다른 트릭은 새 디렉토리를 생성할 때 최신 디렉토리에 대한 심볼릭 링크를 생성하는 것입니다.

mkdir "parentdir/$i" && ln -sf "parentdir/$i" parentdir/latest

그러면 접근이 쉽습니다 parentdir/latest/payload.gzip.

관련 정보