如果文件不存在,Bash 单行命令即可自动创建文件

如果文件不存在,Bash 单行命令即可自动创建文件

我想要一个 Bash 单行程序,如果文件不存在,则自动创建文件。这本质上意味着“如果文件不存在,则创建它”,但要确保在执行 if 和创建文件之间的短暂时间内,没有其他人设法创建该文件。

答案1

窃取答案来自各种评论和链接到[SO]。似乎有一个POSIX 兼容方法这并不涉及mkdir我在下面的原始答案中提到的

set -o noclobber # or set -C
{ > file ; } &> /dev/null

此重定向至文件如果文件已存在则返回 0 或失败并返回非零。


原始答案

您必须使用mkdir- 这是原子的,要么创建目录并且您可以继续,要么不创建目录以便您采取适当的操作。

当然,mkdir不会创建文件,但是一旦您知道您对该目录具有独占访问权限,那么您就可以在其中创建您想要的文件。

至于一行代码 - 我将把它留给你。我个人会把它写成几行,因为这样更易于维护。

答案2

试试这个。它ln提供了测试和设置功能。

touch lock.$$.tmp
if ln lock.$$.tmp lock.dat 2>/dev/null
then
    echo "File is mine"
else
    echo "Test and set failed"
fi
rm -f lock.$$.tmp

答案3

它是文件还是目录?如果是文件,您可以使用简单的命令 touch - 如果文件存在,它只会修改上次访问时间。如果文件不存在,则创建。

答案4

如果你不关心文件名,你可以将此任务委托给实用程序,例如 mktemp

Create a temporary file or directory, safely, and print its name.
TEMPLATE must contain at least 3 consecutive `X's in last component.
If TEMPLATE is not spec‐ified, use tmp.XXXXXXXXXX, and --tmpdir is 
implied.  Files are created u+rw, and directories u+rwx, minus umask
restrictions.

调用:

filename=$(mktemp)

相关内容