설정

설정

나는 브라우저에서 끔찍한 숫자 파일 이름을 가진 PDF 파일을 자주 다운로드합니다. 이것들은 자동으로 ~/Downloads. 이상적으로는 다음을 사용하여 이러한 파일을 열 수 있기를 바랍니다.

evince "the most recently modified file"

~/Downloads파일 이름을 찾기 위해 열 필요 없이 .

에서 "가장 최근에 수정된 파일"을 지정하는 간단한 방법이 있습니까 bash?

참고: 나는 그런 줄 안다가능한하지만 이상적으로는 이름을 확인하는 ls -t것 보다 더 간단한 솔루션을 찾고 있습니다 .~/Downloads

답변1

evince "$(ls -t | head -n1)"

공백, 탭 및 인쇄 특수 문자를 처리하지만 파일 이름에 개행 문자가 포함되어 있거나 인쇄되지 않는 다른 문자가 있으면 중단될 수 있습니다.

답변2

ls -t이는 약간의 복잡성이 추가되는 대신 보다 정확하고 강력한 접근 방식입니다 .

설정

에 짧은 쉘 스크립트(아래 코드)를 추가하십시오 $PATH. ~/bin그러기에 좋은 곳이에요.

꼭 기억하세요

  • 스크립트는 실행 가능합니다chmod +x ~/bin/script_name
  • ~/bin당신의$PATH

용법

~/Download최신 파일에 대해 실행하려는 명령을 에 전달합니다 last_download.

스크립트 이름을 지정했다고 가정합니다.last_download

  • last_download(인수 없음): evince기본 명령인 를 다음 파일의 최신 파일에서 실행합니다.~/Downloads
  • last_download mplayer: mplayer다음의 최신 파일에서 실행됩니다.~/Downloads
  • last_download cp -t ~/Desktop: 최신 파일을 ~/Downloads다음 위치 에 복사합니다.~/Desktop

암호

#!/bin/sh
# Usage: last_download [cmd [options]...]

newest=
dir=~/Downloads

# default command
if [ $# -eq 0 ]; then
        set -- evince;
fi

# find newest file
for f in "$dir"/*; do
        if [ -z "$newest" ] || [ "$f" -nt "$newest" ]; then
                newest="$f"
        fi
done
if ! [ -e "$newest" ]; then
        exit 1
fi

# run command on newest file
"$@" "$newest"

참고: 스크립트는 보기만 ~/Download하지만 모든 디렉터리를 지원하도록 일반화하는 것은 어렵지 않습니다. 이 경우 이름 변경도 보장됩니다.

답변3

exec zsh
evince ~/Downloads/*.pdf(om[1])

또는 zsh로 전환하고 싶지 않은 경우

cd ~/Downloads
zsh -c 'evince ./*.pdf(om[1])'

괄호 사이의 비트는 다음과 같습니다.글로벌 한정자. om이름 대신 수정 시간을 사용하도록 글로브의 순서를 변경합니다(최신 항목 먼저). [1]첫 번째 일치 항목만 사용한다는 의미입니다.

자세한 내용은 다음을 참조하세요."zsh에서 glob을 어떻게 필터링합니까?"에 대한 답변입니다..

답변4

아니요, 설사 있다고 해도 일부 시스템 로그가 일반적으로 가장 최근에 업데이트된 파일이 아닐 것이라고 확신할 수 없습니다.

Kevin의 대답(그가 나를 이겼습니다)은 단지 피하고 싶다면 효과가 있습니다.수동으로열리는 ~/Downloads.

관련 정보