我正在做一些东西,我在一个文件中存储数据。 但是每次我运行脚本时,它都会被追加到前一个文件中。
我想要帮助我如何删除文件,如果它已经存在。
我正在做一些东西,我在一个文件中存储数据。 但是每次我运行脚本时,它都会被追加到前一个文件中。
我想要帮助我如何删除文件,如果它已经存在。
当前回答
你可以用这个:
#!/bin/bash
file="file_you_want_to_delete"
if [ -f "$file" ] ; then
rm "$file"
fi
其他回答
你可以用这个:
#!/bin/bash
file="file_you_want_to_delete"
if [ -f "$file" ] ; then
rm "$file"
fi
像这样的东西是可行的
#!/bin/sh
if [ -fe FILE ]
then
rm FILE
fi
-f检查它是否是常规文件
-e检查文件是否存在
更多信息请参考if
编辑:-e和-f一起使用是多余的,fo单独使用-f也可以
我使用的另一个行命令是:
[ -e file ] && rm file
不要费心检查文件是否存在,只需尝试删除它。
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 <文件>)];rm <file>;fi
同样,如果你用>而不是>>重定向输出,它将覆盖之前的文件