如果不存在的话,可以单线程创build一个文件

我想要一个Bash单行文本,如果它不存在,就会自动创build一个文件。 这意味着本质上“如果文件不存在,创build它”,但确保没有其他人pipe理在创build文件之间的小空间中创build文件。

窃取来自各种意见和链接的答案 [SO]。 看来有一个POSIX兼容的方法 ,不涉及mkdir正如我在下面我的原始答案中提到的

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

这个redirect到文件返回0或失败,如果文件已经存在则返回非零值。


原始答案

你将不得不使用mkdir – 这是primefaces,或者目录被创build,你可以继续或不创build,所以你采取适当的行动。

当然, mkdir不会创build一个文件,但是一旦您知道您拥有对该目录的独占访问权限,那么您可以创build您想要的文件。

至于一个class轮 – 我会留给你的。 就我个人而言,我会写几行,因为这将更容易维护。

它是文件还是目录? 如果是文件,可以使用简单的命令触摸 – 如果文件存在,它只是修改上次访问时间。 如果文件不存在,则创build。

试试这个。 ln提供testing和设置function。

 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 

如果您不关心文件名,则可以将此任务委托给实用程序,例如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)