shell script to remove a file if it already exist
我正在处理一些我将数据存储在文件中的东西。但每次运行脚本时,它都会被附加到前一个文件中。
如果文件已经存在,我需要有关如何删除该文件的帮助。
- 检查文件是否存在…然后打电话给rm $my_file,对吗?你在用什么贝壳?
不要费心检查文件是否存在,只需尝试删除它。
1 2 3
| rm -f /p/a/t/h
# or
rm /p/a/t/h 2> /dev/null |
但更可能的是,如果您要附加到文件中,这是因为您的脚本正在使用>>将某些内容重定向到文件中。用>代替>>。很难说,因为你没有提供代码。
- 如果他们需要知道它是否存在并被删除,这是没有帮助的。吃stderr并不能提供这些。不处理存在不会让您有一个更广泛的脚本运行而不会失败。
- @你的评论是正确的,但与问题无关。
- @Uchuugaka这是一个简单的解决方案,当你不关心文件是否存在时,你只需要确保它不存在。
- 好的答案应该是即将到来的,关于副作用的完整答案是对我的消息的概括,但是shell脚本经常想知道什么是发现的,什么是发现的,什么是未执行的。
我使用的另一个单行命令是:
- 不是这样的。可惜它很紧凑。
- rm:无法删除"file":没有此类文件或目录
- 或者:!-e文件]rm文件。此版本返回0而不是某些错误。
您可以使用:
1 2 3 4 5 6 7
| #!/bin/bash
file="file_you_want_to_delete"
if [ -f $file ] ; then
rm $file
fi |
如果您想忽略检查文件是否存在的步骤,那么您可以使用一个相当简单的命令,该命令将删除文件(如果存在),如果不存在则不会引发错误。
- 这只是2015年最高评级答案的一部分副本。
- 主要的答案并没有解释,使用-f,它不会抛出错误。这个答案帮助了我,谢谢。
像这样的东西行得通
1 2 3 4 5 6
| #!/bin/sh
if [ -fe FILE ]
then
rm FILE
fi |
-F检查它是否是常规文件
-e检查文件是否存在
Introduction to if for more information
编辑:与-f一起使用的-e是多余的,单独使用-f也应该有效。
- 不推荐使用-a,改用-e。
- 我的坏,固定了。谢谢@mziccard
- 这将在目录、链接或其他非正常文件上引发错误。使用-f更好/更安全。
- 也修复了@jindra helcl,谢谢
- 好啊。不过,-fe中的-e是多余的,据我所知,-f也检查了文件的存在。
- 如果我编辑,我会从你的答案中复制一份,但我会精确的
- 无论出于什么原因,我都可以让它与-e和-f一起工作,但是-f e给了我"期望的普通操作员"。甚至在引用了我的变量或者切换到bash和双括号之后。
Jindra Helcl答案的一行版本:
[ -f file ] && rm file
或使用变量:
1 2 3 4
| #!/bin/bash
file="/path/to/file.ext"
[ -f $file ] && rm $file |
if [ $( ls ) ]; then rm ; fi
另外,如果使用>而不是>>重定向输出,它将覆盖以前的文件。
- 这不是一行,对不起,@liwp ou stephen one就是这样。
- 我真的有点懒洋洋的。:d这是我的一行:a; b; c; d; e;....。
- 即使正确引用,如果file类似于5 -lt 2的话,这也会中断。