下面是我对这个问题的尝试。这是一个功能脚本,但我必须指定要用于每种文件类型的应用程序。由于这些关于默认应用程序的信息必须已经存储在 Linux/Ubuntu 上的某个地方,我如何访问它们并将它们合并到我的脚本中?
此外,我的脚本能否以任何方式更“优雅”?
感谢您帮助 Bash 脚本初学者!我很感激任何评论。
#!/bin/bash
# Open the latest file in ~/Downloads
filename=$(ls -t ~/Downloads | head -1)
filetype=$(echo -n $filename | tail -c -3)
if [ $filetype == "txt" ]; then
leafpad ~/Downloads/$filename
elif [ $filetype == "pdf" ]; then
evince ~/Downloads/$filename
fi
最佳答案
How do I open a file in its default program - Linux应该可以帮助您解决问题的第一部分:
xdg-open ~/Downloads/$filename
如其他答案中所述,最好不要相信脚本中 ls
的输出,尤其是当文件名中包含换行符等不常见字符时。在脚本中可靠地获取文件名列表的一种方法是使用 find
命令,并将它们以 null 分隔到管道中。
所以用一行来回答你的问题:
find ~/Downloads -maxdepth 1 -type f -printf "%C@ %p\0" | sort -zrn | { read -d '' ts file; xdg-open "$file"; }
分解:
find
命令列出了~/Download
目录中的文件,但不会深入到子目录中。文件名以给定的 printf 格式打印,其中列出了一个数字时间戳,后跟一个空格,再后跟一个空定界符。注意 printf format specifiers forfind
与常规 printf 不同sort
command按第一个字段(数字时间戳)对生成的空分隔列表 (-z) 进行数字排序 (-n)。排序顺序颠倒 (-r),以便最先显示最新条目read
命令将列表中第一个文件的时间戳和文件名读取到ts
和file
变量中。-d ''
告诉read
使用空分隔符。- 使用
xdg-open
打开文件。
注意 read
和 xdg-open
命令在 curly bracket inline group 中,所以 file
变量在两者的范围内。
关于linux - 使用 bash 脚本打开最新下载的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20665673/