bash에서 별표(*)로 사용되는 파일 정렬 방법을 변경하는 방법은 무엇입니까?

bash에서 별표(*)로 사용되는 파일 정렬 방법을 변경하는 방법은 무엇입니까?

수정 날짜가 가장 오래된 파일부터 시작하여 수정 날짜가 가장 최근인 파일로 끝나는 디렉터리의 모든 파일에 대해 명령을 실행하려고 합니다.

*다음과 같이 디렉터리의 모든 파일에 대해 명령을 실행하는 데 별표( )가 유용하다고 생각합니다 .

$ stat -x *

그러나 파일을 알파벳순으로 정렬하려면 동일한 기능을 달성하면서 수정 날짜가 가장 오래된 파일부터 시작하는 방법이 있습니까?

편집: 인간의 의미에서 "가장 이른", 가장 오래된 문서를 의미합니다.

답변1

GNU 도구를 사용한다고 가정하면 다음과 같은 작업을 수행해야 합니다.

find . -maxdepth 1 -name '*ASD*' -printf '%T@\t%p\0' | 
  sort -z -k1.1n |
  while IFS=$'\t' read -rd '' mtime name; do
    # do something with the filename
    echo ">>>$name"
  done

줄 바꿈을 포함하는 이름과 같이 가능한 파일 이름을 처리하는 데 추가 후프가 사용됩니다.

이것을 함수로 캡슐화하려면 다음과 같이 작성합니다.

files_by_mtime () { 
    local pattern=$1
    local -n arr=$2
    arr=()
    while IFS=$'\t' read -rd '' mtime name; do
        arr+=("$name")
    done < <(
        find . -maxdepth 1 -name "$pattern" -printf '%T@\t%p\0' | sort -z -k1.1n
    )
}

files_by_mtime '*' myarr
for file in "${myarr[@]}"; do
    # do something with the filename
    echo ">>>$file"
done

필수 bash 버전 4.3+

답변2

ls -tr현재 디렉토리의 파일은 가장 오래된 수정 시간을 기준으로 정렬됩니다.

관련 정보