Shell脚本删除一个已经存在的文件

我正在处理一些东西,我在文件中存储数据。 但是每次我运行脚本时,它都会被追加到前一个文件中

我想要帮助我如何删除文件,如果它已经存在。

426044 次浏览

像这样的东西是可行的

#!/bin/sh


if [ -fe FILE ]
then
rm FILE
fi

-f检查它是否是常规文件

-e检查文件是否存在

if简介获取更多信息

编辑: -e与-f一起使用是多余的,fo单独使用-f也可以

你可以用这个:

#!/bin/bash


file="file_you_want_to_delete"


if [ -f "$file" ] ; then
rm "$file"
fi

不要费心检查文件是否存在,只需尝试删除它。

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将在您执行下一个期望它不存在的命令之前创建。尝试这是一个典型的竞争条件。不要这样做。

if [ $( ls <file> ) ]; then rm <file>; fi

同样,如果你用>而不是>>重定向输出,它将覆盖之前的文件

我使用的另一个行命令是:

[ -e file ] && rm file

如果您想忽略检查文件是否存在的步骤,那么可以使用一个相当简单的命令,如果文件存在,该命令将删除文件,如果文件不存在,则不抛出错误。

 rm -f xyz.csv

一个单行shell脚本,如果一个文件已经存在,就删除它(基于Jindra Helcl的回答):

[ -f file ] && rm file

或者用一个变量:

#!/bin/bash


file="/path/to/file.ext"
[ -f $file ] && rm $file

所以在我的情况下,我想删除一个FIFO文件之前,我再次创建它,所以这为我工作:

#!/bin/bash


file="/tmp/test"
rm -rf $file | true
mkfifo $file

| true将继续脚本,即使没有找到文件。