나는 터무니없이 숫자로 된 파일 이름을 가진 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에서 글로브를 필터링하는 방법"에 대한 답변입니다..
답변4
아니요, 일부 시스템 로그 파일이 최근에 업데이트되었더라도 일반적으로 업데이트되지 않았는지 확신할 수 없습니다.
그냥 피하고 싶다면 Kevin의 대답(그가 나를 이겼어요)이 효과가 있습니다.수동열리는 ~/Downloads
.