Answers:
不要打扰检查文件是否存在,只需尝试将其删除。
rm -f /p/a/t/h
# or
rm /p/a/t/h 2> /dev/null
请注意,如果文件不存在,则第二个命令将失败(返回非零退出状态),但由于-f
(简称--force
)选项,第一个命令将成功执行。根据情况,这可能是一个重要的细节。
但是更有可能的是,如果要追加到文件,那是因为脚本>>
用于将某些内容重定向到文件中。只需替换>>
为>
。由于您未提供任何代码,因此很难说。
请注意,您可以执行类似的操作test -f /p/a/t/h && rm /p/a/t/h
,但这完全没有意义。测试很有可能会返回true,但是/ p / a / t / h在尝试将其删除之前将不存在,或者更糟的是,测试将失败并创建/ p / a / t / h在执行下一个预期不存在的命令之前。尝试这是经典的比赛条件。不要这样
rm /p/a/t/h 2> /dev/null
echo $?
如果文件不存在,则不会将返回码()保留为0。仅仅因为我们试图删除不存在的文件,这会使詹金斯的工作失败。
noclobber
于Shell的魔术(例如在bash中),或者对现有文件进行chmod-ing,以便在文件存在时重定向失败(无法避免竞争条件),但是所有要做的就是使错误变得更加微妙。
我使用的另一行命令是:
[ -e file ] && rm file
您可以使用此:
#!/bin/bash
file="file_you_want_to_delete"
if [ -f $file ] ; then
rm $file
fi
echo $?
如果文件不存在,也确保不会给出1。
如果要忽略检查文件是否存在的步骤,则可以使用一个相当简单的命令,该命令将删除该文件(如果存在),并且在不存在的情况下不会引发错误。
rm -f xyz.csv
-f
它不会引发错误。这个答案对我有帮助,谢谢。
这样的事情会起作用
#!/bin/sh
if [ -fe FILE ]
then
rm FILE
fi
-f检查它是否是常规文件
-e检查文件是否存在
有关更多信息的简介
编辑: -e与-f一起使用是多余的,仅使用-f的fo也应该工作
-a
已弃用,请-e
改用。
-f
。
-e
在-fe
是多余的,因为-f
还检查该文件是否存在,据我知道..
if [ $( ls <file> ) ]; then rm <file>; fi
另外,如果您使用重定向输出,>
而不是>>
它将覆盖先前的文件
file
类似情况5 -lt 2
rm $my_file
,对吗?您正在使用什么外壳?