設定

設定

我經常從瀏覽器下載帶有令人髮指的數位檔案名稱的 PDF 檔案。這些會自動進入~/Downloads.理想情況下,我希望能夠使用以下命令開啟這些文件:

evince "the most recently modified file"

無需打開即可~/Downloads查找檔案名稱。

有沒有一種簡單的方法來指定「最近修改的檔案」bash

注意:我知道這是可能的來做到這一點,但理想情況下我正在尋找一種比ls -t'ing~/Downloads檢查名稱更簡單的解決方案。

答案1

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

雖然它可以處理空格、製表符和(我相信)打印特殊字符,但如果文件名包含換行符,並且可能包含其他一些非打印字符,它就會中斷。

答案2

這是一種比 更正確、更穩健的方法ls -t,但代價是增加了一些額外的複雜性。

設定

將一個簡短的 shell 腳本(程式碼如下)加入您的$PATH. ~/bin是一個好地方。

記得確認一下

  • 該腳本是可執行的chmod +x ~/bin/script_name
  • ~/bin在你的$PATH

用法

將要在最新文件上運行的命令傳遞~/Downloadlast_download.

例子

假設您為腳本命名last_download

  • last_download(無參數):evince在最新文件上執行預設命令~/Downloads
  • last_download mplayermplayer:在最新的文件上運行~/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更改 glob 的順序以使用修改時間而不是名稱(最新的在前)。[1]意味著僅使用第一個匹配項。

有關更多信息,請參閱這是「如何在 zsh 中過濾 glob」的答案

答案4

不,即使有,您也無法確定某些系統日誌通常不是最近更新的檔案。

如果你只是想避免,凱文的回答(他先於我)有效手動開幕~/Downloads

相關內容