如果检查文件中生成文件删除之前存在

问题描述 投票:6回答:2

我有一个C ++项目中生成文件(编译:C ++ 11)。你怎么能检查是否一个特定的文件,生成文件命令删除之前的存在? 下面是代码:

bin: charstack.h error.h
        g++ -Wall -std=c++11 main.cpp charstack.cpp error.cpp -o bin

run:
        ./bin.exe

clean:
        rm bin.exe

# This statement removes auto generated backups on my system.
cl:
        rm charstack.h~ charstack.cpp~ main.cpp~ makefile~ error.h~ error.cpp~

我会如何生成文件检查,看是否产生的自身。〜尝试。当用户将其删除之前存在的备份文件

make cl

在命令行?这样做的目的是为了避免在运行“让CL”输出这些错误的终端:

rm: cannot remove `charstack.h~': No such file or directory
rm: cannot remove `charstack.cpp~': No such file or directory
rm: cannot remove `main.cpp~': No such file or directory
rm: cannot remove `error.h~': No such file or directory
rm: cannot remove `error.cpp~': No such file or directory
make: *** [cl] Error 1
makefile gnu-make
2个回答
15
投票

老实说,这是一个XY的问题,这是不是因为没有这样的事实,该项目是一个C ++一个,也不是它使用的规范C ++ 11。

正因为如此,该问题的标题有点误导,以及它的标签。

无论如何,你可以使用选项-f。从rm的手册页:

忽略不存在的文件和参数,从不提示

所以,这是足够使用以下行:

 rm -f charstack.h~ charstack.cpp~ main.cpp~ makefile~ error.h~ error.cpp~

事实上,它不检查是否存在这些文件,而且还如果不存在,它不会抱怨。


0
投票

尽管这个问题已经回答了,我附上不同的解决方案,对文件和目录的工作(因为rm -rf DIRNAME不吭声了)

下面是用于去除变量${OUTDIR}目录只有在目录存在的规则。这个例子很容易对文件进行调整:

clean:
    if [ -d "${OUTDIR}" ]; then \
        rm -r ${OUTDIR}; \
    fi \

请注意,关键的观察结果是你必须写通常的bash IF-THEN-esle,就好像它在那里在一行(即,使用\换行符之前,以及与每个命令之后;)。该实施例可以容易地适用于不同的(非bash)的壳。

© www.soinside.com 2019 - 2024. All rights reserved.