Bash

是否可以在命令行參數中引用最近修改的文件?

  • October 21, 2015

我經常從我的瀏覽器下載帶有令人髮指的數字文件名的 PDF 文件。這些自動進入~/Downloads. 理想情況下,我希望能夠通過以下方式打開這些文件:

evince "the most recently modified file"

無需打開~/Downloads即可找到文件名。

有沒有一種簡單的方法來指定“最近修改的文件” bash

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

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

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

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

設置

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

記得確保

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

用法

將要在最新文件上執行的命令傳遞~/Downloadlast_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但不難將其概括為支持任何目錄,在這種情況下,還需要更改名稱。

引用自:https://unix.stackexchange.com/questions/34736