특정 확장자를 가진 파일을 수정 시간별로 정렬하여 배열에 저장합니다.

특정 확장자를 가진 파일을 수정 시간별로 정렬하여 배열에 저장합니다.

디렉터리 파일을 정렬하거나 배열에 저장하는 방법에 대한 많은 답변을 찾았습니다.

정렬 예

ls -t 

배열의 디렉토리 목록

array=(*)

내 특정 문제는 파일을 특정 방식으로 정렬해야 합니다.확장하다(예 *.sh: 수정 날짜/시간을 기준으로 정렬된 모든 파일을 배열에 저장하여 나중에 파일을 편집하거나 삭제할 때 사용할 수 있습니다.

예를 들어 배열의 파일을 정렬한 후 다음 명령을 실행하면 최신 파일을 삭제할 수 있습니다.

rm ${array[0]} 

답변1

존재하다다루기 힘든이건 아주 간단해요

array=(*.sh(Nom))

이것글로벌 예선 om수정 시간을 기준으로 일치 항목을 정렬하고(최신 항목부터) N일치 항목이 없으면 오류를 발생시키지 않고 배열을 강제로 비웁니다.

bash와 같은 다른 쉘에는 시간별로 정렬하는 좋은 방법이 없습니다. 를 사용할 수 있지만 ls -t출력이 명확하지 않아 중단될 수 있습니다. 파일 이름에 ls공백이나 가 아닌 인쇄 가능한 것으로 간주되는 문자 만 포함되어 있다는 것을 알고 있는 경우 \[*?명령 대체를 사용할 수 있습니다.

array=($(ls -t -- *.sh 2>/dev/null))

와일드카드와 가로 공백을 보호하여 더욱 강력하게 만들 수 있지만 개행 문자와 인쇄할 수 없는 문자는 여전히 문제입니다.

IFS=$'\n'; set -f
array=($(ls -t -- *.sh 2>/dev/null))
unset IFS; set +f

zsh를 제외하고 변수 값을 인용할 때 큰따옴표를 사용하는 것을 잊지 말고 --이름이 대시로 시작하는 파일을 보호하십시오. 그렇지 않으면 옵션으로 해석됩니다.rm -- "${array[0]}"

답변2

이를 강력하게 수행하려면 ls다음을 수행해야 합니다.아니요경로 구분 기호를 제외한 모든 항목을 분할합니다. 이것이 바로 그 용도입니다.

IFS=/; set -f
set -- $(ls -dt ./*)
shift

이것은 현재 디렉토리에서 점이 아닌 모든 파일을 정렬하고 결과를 쉘 배열에 저장합니다 $@. POSIX가 주어지면 ls이는 어떤 종류의 파일 이름 수정에도 영향을 받지 않습니다. 다양한 특수 문자(개행 문자 포함)가 구분된 결과에 보존됩니다. 모든(근데 마지막꺼)그러나 .이름에는 추가 점이 추가됩니다. 결과를 보다 영구적인 배열에 넣으려면 작업을 함께 처리할 수 있습니다. 예를 들면 다음과 같습니다.

a=()
until [ -z "$2" ] &&
      a+="$1" && shift
do    a+="${1%?}"
shift;done

다른 사람들이 당신에게 어떤 말도 안되는 블로그를 링크하더라도 당신은할 수 있는ls무엇을 찾아야 할지 알면 결과를 강력하게 처리할 수 있습니다.

관련 정보