최신 파일 자동 완성 이름 , 즉 최신 mtime

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

$ 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`"



답변

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전과 같은 방식으로 할 수 있습니다 .


답변

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

zstyle ':completion:*' file-sort date

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

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

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


답변

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

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

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


답변

질문의 배경은 사용 속도입니다. 키보드 매크로가 가장 적합합니다. 추가 ~/.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파일에 대한 솔루션이 누락 된 디렉토리에 약간 도움이됩니다.


답변