在 Linux 上使用 Bash 创建一个临时文件
创始人
2024-03-02 11:38:43
0

基于 Fedora 的系统上的 mktemp 命令和基于 Debian 的系统上的 tempfile 是专门为减轻这种负担而设计的,它使创建、使用和删除独特的文件变得容易。

使用 Bash 脚本语言进行编程时,有时需要创建一个临时文件。例如,你可能需要一个可以提交到磁盘的中间文件,以便你可以使用另一个命令对其进行处理。创建诸如 temp 之类的文件或任何以 .tmp 结尾的文件很容易。但是,这些名称很可能是由其他进程生成的,因此你可能会不小心覆盖现有的临时文件。除此之外,你不应该花费脑力想出看起来独特的名字。基于 Fedora 的系统上的 mktemp 命令和基于 Debian 的系统上的 tempfile 是专门为减轻这种负担而设计的,它使创建、使用和删除独特的文件变得容易。

创建一个临时文件

mktemptempfile 都创建一个临时文件作为它们的默认操作,并打印文件的名称和位置作为输出:

$ tempfile
/tmp/fileR5dt6r

$ mktemp 
/tmp/tmp.ojEfvMaJEp

除非你指定不同的路径,否则系统会将临时文件放在 /tmp 目录中。

对于 mktemp,可以使用 -p 选项指定路径:

$ mktemp -p ~/Demo
/home/tux/Demo/tmp.i8NuhzbEJN

对于 tempfile,可以使用 --directory-d 选项:

$ tempfile --directory ~/Demo/
/home/sek/Demo/fileIhg9aX

找到你的临时文件

使用自动生成的临时文件的问题是你无法知道它的名字是什么。这就是为什么两个命令都返回生成的文件名作为输出的原因。你可以使用 Konsole、GNOME 终端或 rxvt 等交互式 shell 来使用终端上显示的文件名与文件进行交互。

但是,如果你正在编写脚本,则无法通过读取文件名并在以下命令中使用它来进行干预。

mktemptempfile 的作者想到了这个问题,并且有一个简单的解决方法。终端将输出发送到名为“标准输出”的流。你可以通过将变量设置为在子 shell 中启动的命令的结果来捕获标准输出:

$ TMPFILE=$(mktemp -p ~/Demo)

$ echo $TMPFILE
/home/tux/Demo/tmp.PjP3g6lCq1

引用文件时使用 $TMPFILE,它与直接与文件本身交互相同。

使用 mktemp 创建一个临时目录

你还可以使用 mktemp 命令创建目录而不是文件:

$ mktemp --directory -p ~/Demo/
/home/tux/Demo/tmp.68ukbuluqI

$ file /home/tux/Demo/tmp.68ukbuluqI
/home/tux/Demo/tmp.68ukbuluqI: directory

自定义临时名称

有时你甚至可能希望在伪随机生成的文件名中加入可预测性元素。你可以使用这两个命令自定义临时文件的名称。

使用 mktemp,你可以为文件名添加后缀:

$ mktemp -p ~/Demo/ --suffix .mine
/home/tux/Demo/tmp.dufLYfwJLO.mine

使用 tempfile,你可以设置前缀和后缀:

$ tempfile --directory ~/Demo/ --prefix tt_ --suffix .mine
/home/tux/Demo/tt_0dfu5q.mine

把 tempfile 作为 touch 使用

你还可以使用 tempfile 设置自定义名称:

$ tempfile --name not_random
not_random

当你使用 --name 选项时,它是绝对的,忽略所有其他形式的自定义。事实上,它甚至忽略了 --directory 选项:

$ tempfile --directory ~/Demo --prefix this_is_ --suffix .all --name not_random_at
not_random_at

在某种程度上,tempfile 可以替代 touchtest,因为它拒绝创建已经存在的文件:

$ tempfile --name example.txt
open: file exists

tempfile 命令并非默认安装在所有 Linux 发行版上,因此在将其用作脚本中的 test 的 hack 之前,你必须确保它存在。

安装 mktemp 和 tempfile

GNU Core Utils 包括 mktemp 命令。主要发行版默认包括 Core Utils(它是包含 chmodcutdu 和其他基本命令的同一个软件包)。

Debian Utils 软件包包含 tempfile 命令,默认安装在大多数基于 Debian 的发行版和 Slackware Linux 上。

总结

临时文件很方便,因为不会混淆它们是否可以安全删除。它们是临时的,意在根据需要使用并毫不犹豫地丢弃。在需要时使用它们,并在完成后清除它们。


via: https://opensource.com/article/22/6/make-temporary-file-bash

作者:Seth Kenlon 选题:lkxed 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关内容

不要通过代理在Domino...
在Domino服务器上获取临时文件夹的文件列表时,可以使用Lotu...
2025-01-10 22:31:28
不需要首先创建临时文件即可...
使用df命令以-inodes选项运行来获取节点使用情况,如下所示:...
2025-01-10 15:01:06
不使用临时文件从文件字节获...
假设文件字节数组为 file_bytes,使用以下代码可以将其转换...
2024-12-29 01:01:56
BlazorWebAsse...
当在Blazor WebAssembly .Net Core Ho...
2024-12-21 23:01:38
BizTalk Serve...
在BizTalk Server 2020中,如果未能在进程用户上下...
2024-12-20 06:00:26
避免在调用suproces...
在调用subprocess.run()时避免使用临时文件,可以使用...
2024-12-17 03:01:53

热门资讯

PHP最佳实践(译) 简介PHP是一门复杂的语言,经过多年折腾,使其不同版本之间高度不一致,有时还有些bug。 每个版本都...
值得收藏的 27 个机器学习的... 机器学习 ( Machine Learning ) 有很多方面,当我开始研究学习它时,我发现了各种各...
为什么计量 IT 的生产力如此... 在某些行业里,人们可以根据一些测量标准判定一个人的生产力。比如,如果你是一个零件制造商,可以通过一个...
8个有趣的Linux提示与技巧... 我们时不时给你带来关于Linux的提示与技巧。和这个系列保持一致,这里有8个我们从读者收到最有趣的提...
8 个提升你的隐私防护的开源密... 使用一些顶级开源密码管理器,确保你的登录凭证安全无虞。密码管理器是一项非常有用的实用程序。在你想寻找...
硬核观察 #885 苹果 AR... 苹果 AR 眼镜被无限期推迟据报道,由于技术上的挑战,苹果公司已经无限期推迟了其轻型增强现实(AR)...
Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
2020 年的 GitHub ... 距离 2020 年结束只剩下区区 24 天,我们即将结束魔幻的 2020 ,迎来新的一年,新的一年或...
开源新闻速递:openSUSE... 今日关注openSUSE 项目组的 Dominique Leuenberger 在他的周报中说:“这...
KDE4.11 Beta1 正...   KDE 项目工作组刚刚发布了 KDE Software Compilation 4.11 Bet...