디렉토리 목록을 알파벳순으로 정렬하고 특정 문자열 다음에 첫 번째 값을 정렬하는 방법은 무엇입니까?

디렉토리 목록을 알파벳순으로 정렬하고 특정 문자열 다음에 첫 번째 값을 정렬하는 방법은 무엇입니까?

yyyy-MM-dd--HH:mm:ss 형식의 이름을 가진 백업 폴더로 가득 찬 디렉터리가 있습니다.

동일한 형식으로 날짜를 입력하는 경우 첫 번째 디렉터리를 그 다음에 정렬하고 해당 폴더를 다른 위치에 복사할 수 있는 방법이 있습니까?

예를 들어, 내 백업 목록이 다음과 같다면:

2019-12-04--16:12:56
2019-12-09--13:36:53
2020-01-23--13:24:13
2020-01-23--13:47:03

입력했는데 2020-01-05--00:00:00복원하고 싶었어요2020-01-23--13:24:13

답변1

for dir in ????-??-??--??:??:??/; do
    if [[ $dir > "2020-01-05--00:00:00" ]]; then
        printf '%s\n' "$dir"

        # process "$dir" here

        break
    fi
done

위 스크립트는 이름이 패턴과 일치하는 현재 디렉토리의 디렉토리를 반복합니다 ????-??-??--??:??:??.

각 디렉토리에 대해 문자열과 비교됩니다 2020-01-05--00:00:00. 이 문자열 뒤에 사전순으로 오면 디렉터리 이름을 인쇄하고 루프를 종료합니다.

ls이는 경로 이름 확장으로 생성된 목록이 현재 조합 순서에 따라 정렬되기 때문에 작동합니다( 목록이 기본적으로 정렬되는 것과 마찬가지로 ).

이 디렉토리를 다른 곳에 복사하려면 주석을 다음과 같이 바꾸십시오.

rsync -av "$dir" /somewhere/elsewhere

다음은 첫 번째 명령줄 인수에서 특정 문자열을 가져와 동일한 작업을 수행하는 스크립트입니다.

#!/bin/bash

for dir in ????-??-??--??:??:??/; do
    if [[ $dir > "$1" ]]; then
        printf '%s\n' "$dir"

        # process "$dir" here

        break
    fi
done

나열된 디렉토리를 사용하여 이를 테스트하십시오.

$ ls -l
total 10
drwxr-xr-x  2 myself  wheel  512 Jan 24 11:14 2019-12-04--16:12:56
drwxr-xr-x  2 myself  wheel  512 Jan 24 11:14 2019-12-09--13:36:53
drwxr-xr-x  2 myself  wheel  512 Jan 24 11:14 2020-01-23--13:24:13
drwxr-xr-x  2 myself  wheel  512 Jan 24 11:14 2020-01-23--13:47:03
-rw-r--r--  1 myself  wheel  119 Jan 24 11:23 script.sh
$ ./script.sh "2020-01-05--00:00:00"
2020-01-23--13:24:13/

답변2

나는 그것을 알아

$ printf '%s\n' ????-??-??--??:??:?? | awk '$1 > "2020-01-05--00:00:00"{print;exit}'
2020-01-23--13:24:13

답변3

그리고 zsh:

ref=2020-01-05--00:00:00
list=($ref *(DN/oN)) # list is ref + all directories unsorted
list=(${(o)list}) # sort the list (as per locale collation algorithm)
print -r -- ${list[$list[(ie)$ref] + 1]-none}

( $array[(ie)string]xactly 요소의 배열 인덱스로 확장됨)iestring

답변4

당신은 시도 할 수 있습니다

~$ ls -r | head -n 1

관련 정보