linux - 使用 bash 脚本打开最新下载的文件

标签 linux bash ubuntu

下面是我对这个问题的尝试。这是一个功能脚本,但我必须指定要用于每种文件类型的应用程序。由于这些关于默认应用程序的信息必须已经存储在 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 for find与常规 printf 不同
  • sort command按第一个字段(数字时间戳)对生成的空分隔列表 (-z) 进行数字排序 (-n)。排序顺序颠倒 (-r),以便最先显示最新条目
  • read 命令将列表中第一个文件的时间戳和文件名读取到 tsfile 变量中。 -d '' 告诉 read 使用空分隔符。
  • 使用 xdg-open 打开文件。

注意 readxdg-open 命令在 curly bracket inline group 中,所以 file 变量在两者的范围内。

关于linux - 使用 bash 脚本打开最新下载的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20665673/

相关文章:

linux - 如何通过bash获取当前连接网络的BSSID?

linux - 使用 awk 或 sed 比较两个文件的值并将文件 2 到文件 1 的信息附加到新文件 file3

bash - mktemp 在 bash 脚本中使用时失败

linux - 如何在 Shell 脚本中检查 Linux 文件系统是否挂起

node.js - 需要 Socket.io 服务器的启动/停止脚本

eclipse - Spring Tool Suite 3.9.6 编辑器反复刷新

java - 在 linux 上运行 dmg 程序

python gnuplot 从文件中读取

bash - 如何让 grep 从指定的行号开始搜索

node.js - npm 在 Ubuntu 16.04 和 Node 6.0.0 上抛出段错误