디렉토리의 최신 파일에 액세스(알파벳순으로 정렬)

디렉토리의 최신 파일에 액세스(알파벳순으로 정렬)

타임스탬프 앞에 자동 생성된 파일이 가득한 디렉터리에 있는 파일을 열기 위해 명령줄에서 vim을 사용하려고 합니다. 내 머릿속의 타임스탬프를 모르기 때문에 디렉터리에서 가장 최근의 타임스탬프(알파벳순 목록의 마지막 타임스탬프)를 열고 싶습니다.

vim ./my_dir/<last_item>

이를 수행할 수 있는 방법이 있습니까?

답변1

이것은 실제로 zsh의 일입니다.

vim my_dir/*(om[1])

괄호 안의 비트는글로벌 예선. 예를 들어, 이전의 *일반 glob 패턴은 로그 파일만 고려하려는 경우 *.log.glob o한정자를 사용하여 일치 항목의 정렬 순서를 변경할 수 있습니다. om즉, 수정 시간을 기준으로 최신 항목부터 정렬합니다. glob [한정자는 부분 일치만 반환됨을 의미합니다. 즉, [1]첫 번째 일치 항목이 반환되고, [2,4]다음 3개 일치 항목이 반환되고, [-2,-1]마지막 2개 일치 항목이 반환되는 식입니다. 파일 이름이 타임스탬프로 시작하면 *([1])충분합니다 .

다른 셸에서는 최신 파일을 선택하는 좋은 방법이 없습니다. 파일 이름에 인쇄할 수 없는 문자나 개행 문자가 포함되어 있지 않으면 다음을 사용할 수 있습니다.

vim "$(ls -t mydir | head -n 1)"

이름을 기준으로 첫 번째 또는 마지막 파일을 선택하려는 경우 명령줄에서는 약간 장황하지만 스크립트에서는 완벽하게 사용할 수 있는 완전히 안정적이고 이식 가능한 방법이 있습니다.

set -- mydir/*
first_file_name=$1
eval "last_file_name=\${$#}"

답변2

my_dir 안에 있는 경우:

vim $(ls -rt | tail -1)

답변3

이것은 나에게 효과적입니다.

$ ls -rt | tail -1 | xargs vim

그러나 마지막 항목으로 디렉토리가 있을 수 있으며, 이 경우 디렉토리를 필터링해야 할 수도 있습니다.

$ ls -rt | grep -v "^d" | tail -1 | xargs vim

답변4

이걸 찾고 계시는 것 같아요.

[centos@centos temp]$ for i in `seq 100`; do touch $i; done

[centos@centos temp]$ ls -t1 | head -1
100


[centos@centos temp]$ vim /.my_dir/$(ls -t1  | head -1)

그러나 정렬은 전적으로 파일 이름에 따라 달라집니다.

관련 정보