shell脚本,用于删除已存在的文件

时间:2015-07-09 12:50:33

标签: shell

我正在研究一些我将数据存储在文件中的东西。 但每次我运行脚本时都会将其附加到上一个文件中。

如果文件已存在,我需要有关如何删除文件的帮助。

6 个答案:

答案 0 :(得分:110)

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

rm -f /p/a/t/h
# or
rm /p/a/t/h 2> /dev/null

请注意,如果文件不存在,第二个命令将失败(返回非零退出状态),但第一个命令将成功。根据具体情况,这可能是一个重要的细节。

但更有可能的是,如果您要附加到该文件,那是因为您的脚本正在使用>>将某些内容重定向到该文件中。只需将>>替换为>即可。很难说,因为你没有提供代码。

请注意,您可以执行test -f /p/a/t/h && rm /p/a/t/h之类的操作,但这样做完全没有意义。很可能测试将返回true,但在尝试删除它之前/ p / a / t / h将无法存在,或者更糟糕的是测试将失败并且将创建/ p / a / t / h在执行下一个期望它不存在的命令之前。试图这是一个典型的竞争条件。不要这样做。

答案 1 :(得分:99)

我使用的另一行命令是:

[ -e file ] && rm file

答案 2 :(得分:63)

您可以使用:

#!/bin/bash

file="file_you_want_to_delete"

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

答案 3 :(得分:13)

这样的事情会起作用

#!/bin/sh

if [ -fe FILE ]
then 
    rm FILE
fi 

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

-e检查文件是否存在

  

Introduction to if了解更多信息

编辑: -e与-f一起使用是多余的,单独使用-f也应该有效

答案 4 :(得分:5)

Jindra Helcl的答案的一个衬砌版本:

[ -f file ] && rm file

或带有变量:

#!/bin/bash

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

答案 5 :(得分:3)

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

此外,如果您使用>而非>>重定向输出,则会覆盖以前的文件