숫자가 가장 높은 파일 이름을 선택하세요.

숫자가 가장 높은 파일 이름을 선택하세요.

다음과 같은 날짜 파일 목록이 있습니다 ...

filename_20120101.dat
filename_20120102.dat
filename_20120103.dat

파일 이름의 날짜(파일의 날짜 스탬프가 아님)를 기반으로 최신 파일을 선택하는 스크립트가 필요합니다.

답변1

zsh 강제 답변:

echo "The highest-numbered file is" filename_*.dat([-1])

이것은글로벌 예선 [NUM]NUM번째 일치 항목만 유지됩니다(음수 값은 마지막 일치 항목부터 계산됩니다). 너비가 서로 다른 경우 n한정자를 추가하세요 .

% ls
filename_1.dat filename_12.dat filename_17.dat filename_2.dat filename_8.dat
% echo filename_*.dat([-1])
filename_8.dat
% echo filename_*.dat(n[-1])
filename_17.dat

와일드카드는 단어 목록을 찾는 상황에서만 발생하므로 변수에 파일 이름을 할당하려면 변수를 하나의 요소가 있는 배열로 설정해야 합니다.

latest=( filename_*.dat([-1]) )
echo "The highest-numbered file is $latest"

모든 셸에서 전체 일치 목록에 대한 위치 인수를 설정하고 마지막 인수를 유지할 수 있습니다.

set_latest () {
  eval "latest=\${$#}"
}
set_latest filename_*.dat
echo "The highest-numbered file is $latest"

filename_10.datis after filename_09.dat하지만 before 처럼 숫자순이 아닌 알파벳순으로 마지막 항목을 반환한다는 점을 명심하세요 filename_9.dat.

답변2

ls(1)이름별로 파일을 정렬 ls | tail -1하면 됩니다.

답변3

1-라이너:

# for numerical order 
find . -maxdepth 1 -name '*.dat' -print | sort -rV | head -n1

# for alphabetical order
find . -maxdepth 1 -name '*.dat' -print | sort -r | head -n1

ls참고: 대신 사용할 수 있습니다 find.

답변4

파일 이름이 완전히 숫자인 경우 ls가 파일을 알파벳순으로 정렬하고 10이 9 앞에 나타나기 때문에 먼저 정렬을 통해 파이프해야 합니다.

$ touch {1..10)
$ ls | tail -1
> 9

$ ls | sort -n | tail -1
> 10

관련 정보