최신 파일 자동 완성


13

파일 이름이 생성 순간의 타임 스탬프를 기반으로하는 텍스트 파일을 만드는 프로세스가 있습니다.

$ ls
1378971222.txt
1378971254.txt
1378971482.txt
1378971488.txt
1378972089.txt
1378972140.txt
1378972141.txt
1378972153.txt
1378972155.txt
1378972241.txt

가장 최근에 생성 된 파일의 파일 이름 , 즉 최신 mtime 파일을 자동 완성하려면 어떻게 해야합니까? 파일 이름의 거의 모든 문자가 다른 파일과 공유되므로 이러한 파일에 대해 탭 완성을 사용할 수있는 방법이 없습니다. 바로 가기를 찾고 싶습니다 (예 : Alt .마지막 명령의 마지막 인수를 자동 완성하는 등 ). 나는 좋은 곳입니다 다음과 같은 별칭을 섞어서 처리했다 VIM, 그러나 나는 범용 바로 가기 내가 사용할 수있는 경우를 알고 싶어요 kde-open, sqlite3및 기타 응용 프로그램.

alias lastest="vim `ls -t | grep -vE "^total [0-9]*$" | head -n1`"


이 모든 것을 읽은 후에도 질문은 bash 쉘에 최신 파일 경로 (la bash 완료 및 시간순으로 순환)를 삽입하는 키보드 단축키를 갖는 방법에 대한 만족스러운 답변이 아직없는 것 같습니다.
로마 수시

@RomanSusi :이 가장 가까운 대답은 Weidenrinde가 작성한 것이지만 $(ls -t|head -1)줄에 리터럴 만 삽입합니다 . 따라서 사이클링이 없습니다. 만족스러운 답변이 없으면, 나는 가장 많이 가르쳐 주었고 가장 유용한 것을 제공하는 답변을 받아 들였다.
dotancohen

확실한. 그것은 멋진 쉘 기능 일 수 있었으며 왜 아무도 그것을 구현하지 않았는지 궁금합니다.
로마 수시

답변:


6

vim별명에서를 제거하십시오 . 다음과 같이하십시오 :

alias latest='ls -tr | tail -n 1'

그런 다음 아무 프로그램이나 사용하여 최신 파일을 열 수 있습니다.

emacs `latest`
ls `latest`
mv `latest` ../

기타

그러나 파일 이름에 공백이나 이상한 문자가 있으면 파싱하지 않아야합니다ls . 더 좋은 방법은 다음과 같습니다 (에 추가하십시오 .bashrc).

function latest(){
  $1 "$(find . -type f -printf "%C@ %p\n" | sort | tail -n 1 | cut -d " " -f 2-)"
}

이 함수는 인수로 지정한 모든 명령을 실행하고 find호출 결과 (최신 파일)를 해당 명령에 전달합니다. 따라서 다음과 같은 작업을 수행 할 수 있습니다.

latest emacs
latest less

mv $(latest) foo/대신 다음 과 같은 작업을 수행 할 수 있어야합니다 .

function latest(){
   A=(${@})
   prog=$1;
   lat=$(find . -type f -printf "%C@ %p\n" | sort | tail -n 1 | cut -d " " -f 2-)
   if [ ! -z $2 ] ; then 
     args=${A[@]:1}; 
     $prog "$lat" "${A[@]:1}"
   else
     $prog "$lat"
   fi
}

그런 다음, 최신 파일을 복사하려면 bar/, 당신이 할 것

latest cp bar

그리고 당신은 여전히 latest emacs전과 같은 방식으로 할 수 있습니다 .


감사합니다. 여기서 배울 수있는 것이 몇 가지 있습니다.
dotancohen

나는 추천한다 alias latest='\ls -tr | tail -n 1'-당신이 ls별칭 을 가지고 있다면 이것은 효과가있을 것이다 .
domen

5

예를 들어 다음과 같이 쉽게 구성zsh 할 수 있습니다 .

zstyle ':completion:*' file-sort date

(이 스타일이 특정 파일 이름 패턴에만 사용되도록 행을 변경할 수도 있습니다)

zsh bash와 매우 유사합니다. 아마도 bash의 수퍼 세트라고 할 수 있습니다.

그러나 bash는 비슷한 기능을 가지고 있습니다.


고마워요. 몇 가지 이유로 나는 움직이지 않는 것을 선호 zsh하지만, 그렇게하면 북마크가 있습니다!
dotancohen

소개해 주셔서 감사합니다 zsh!
dotancohen 2016 년

3

최신 파일도 마지막으로 정렬되므로을 사용할 수 있습니다 menu-complete-backward. menu-completemenu-complete-backward주기 완성을 통해 또는 첫 번째 또는 마지막 완성 삽입. 옵션 탭과 시프트 탭에 바인딩했습니다.~/.inputrc .

"\e\t": menu-complete
"\e[Z": menu-complete-backward

\e[Zshift-tab을 누를 때 터미널 에뮬레이터가 삽입되지 않을 수 있습니다 . 사용 C-v또는 cat -v당신이 키 조합을 누를 때 삽입 할 텍스트를 볼 수.


실제로 파일은 시간순이 아닌 알파벳순으로 정렬됩니다. 시간순으로 정렬하는 방법을 알아 내면 정보로 업데이트합니다.
dotancohen 2016 년

2

질문의 배경은 사용 속도입니다. 키보드 매크로가 가장 적합합니다. 추가 ~/.inputrc:

# Alt-L --> newest file in directory
"\el": "$(ls -t|head -1)"

추가 아이디어 : 원래, 나는 첫 번째, 두 번째, 세 번째 최신 파일을 제공하는 것을 원했습니다. 장소를 토큰으로 표시하려면 (예 : "grep x _") 키보드 매크로 "\ C-alatest-expansion \ Cm"을 실행하고 "latest-expansion"은 curses-selection 목록에서 선택하라는 메시지를 표시합니다. 명령 행에서 각 "_"토큰의 최신 파일

SHELL에 비해 GUI의 장점 중 하나는 나에게 최근에 사용 / 생성 된 파일과 디렉토리를 선택하는 것이므로 중요한 질문으로 생각합니다. autojump파일에 대한 솔루션이 누락 된 디렉토리에 약간 도움이됩니다.


감사합니다. 도움이됩니다. $(ls -t|head -1)bash 줄에 리터럴 을 삽입 하므로 해석해야합니다. 그것은 덜 유용하지만 여전히 좋은 트릭입니다.
dotancohen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.