Bash: 파일 날짜별로 배열 요소 정렬

Bash: 파일 날짜별로 배열 요소 정렬

myarray라는 배열이 있는 Bash 스크립트가 있습니다.

배열에는 4개 파일의 전체 파일 위치 경로가 포함되어 있습니다.

내가 원하는 것은 파일 생성 날짜별로 배열 요소를 정렬하는 것입니다.

간단한 예로, 배열에 다음 4개의 파일이 있는 경우:

/tmp/file1.txt (in index 0)
/tmp/test/file1.txt (in index 1)
/tmp/test1/file1.txt (in index 2)
/tmp/test2/file1.txt (in index 3)

...인덱스 2의 파일은 다른 파일보다 생성 날짜가 최신이므로 인덱스 1로 정렬해야 합니다.

나는 처음에 다음이 트릭을 수행할 것이라고 생각했습니다.

myarray=($(for each in ${myarray[@]}; do echo $each; done | sort -n))

그런데 배열 내용을 보면 인덱스 0에 최신 파일이 보이지 않습니다.

bash에서 이것을 달성하는 방법을 아는 사람이 있습니까?

답변1

다음은 스크립트를 테스트 중인 시스템이 생성 날짜를 지원하지 않기 때문에 수정 날짜별로 파일을 정렬합니다. 지원되는 경우 교체는 생성 시간을 출력 %Y해야 합니다 .%W

#! /bin/bash
files=(*.txt)
while IFS= read -r line ; do
    sorted+=("$line")
done < <(
    for f in "${files[@]}" ; do
        echo $(stat -c %Y -- "$f")$'\t'"$f"
    done | sort -nk1,1 | cut -t $'\t' -f2-
)

echo "${sorted[@]}"

이름에 공백이 있는 파일에 대해 작동합니다. 개행 문자가 포함된 파일 이름은 문제를 일으킬 수 있지만 파일 이름에 개행 문자를 사용하면 안 됩니다. 그렇죠?

관련 정보