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
.