타임스탬프 앞에 자동 생성된 파일이 가득한 디렉터리에 있는 파일을 열기 위해 명령줄에서 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)
그러나 정렬은 전적으로 파일 이름에 따라 달라집니다.