DQd*_*dlM 7 command-line bash date wildcards files
我经常从浏览器下载带有令人发指的数字文件名的 PDF 文件。这些自动进入~/Downloads. 理想情况下,我希望能够打开这些文件:
evince "the most recently modified file"
Run Code Online (Sandbox Code Playgroud)
无需打开~/Downloads查找文件名。
有没有一种简单的方法来指定“最近修改的文件” bash?
注:我知道这是可以做到这一点,但理想的我期待的,这将是比简单的解决方案ls -t“荷兰国际集团~/Downloads,以检查该名称。
Kev*_*vin 10
evince "$(ls -t | head -n1)"
Run Code Online (Sandbox Code Playgroud)
虽然它会处理空格、制表符和(我相信)打印特殊字符,但如果文件名包含换行符,并且可能包含其他一些非打印字符,它就会中断。
这是一种比 更正确和稳健的方法ls -t,但代价是增加了一些额外的复杂性。
将一个简短的 shell 脚本(下面的代码)添加到您的$PATH. ~/bin是个好地方。
记得确保
chmod +x ~/bin/script_name~/bin 在你的 $PATH将要在最新文件上运行的命令传递~/Download给last_download.
假设您将脚本命名为 last_download
last_download(无参数):evince在最新文件上运行,默认命令~/Downloadslast_download mplayer:mplayer在最新的文件上运行~/Downloadslast_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"
Run Code Online (Sandbox Code Playgroud)
注意:该脚本仅查看,~/Download但不难将其概括为支持任何目录,在这种情况下,还需要更改名称。