Bash
是否可以在命令行參數中引用最近修改的文件?
我經常從我的瀏覽器下載帶有令人髮指的數字文件名的 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
用法
將要在最新文件上執行的命令傳遞
~/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
但不難將其概括為支持任何目錄,在這種情況下,還需要更改名稱。