检查目录是否存在,并在一个命令unix中删除


106

在Unix中,是否可以使用单个命令检查目录是否存在并删除该目录?我遇到了使用ANT'sshexec'任务的情况,该任务只能在远程计算机上运行单个命令。我需要检查目录是否存在并将其删除...


为什么不只使用rmdir?如果目录不存在,它将失败。
Ferruccio

4
它会失败。还有我的ANT脚本中的错误。那将导致我的构建崩溃。
雷莫

mkdir -p如果已存在,使用将忽略错误。
user562374 2011年

2
@ Ferruccio-使用rm -rf / dir_name不会引发错误,但是rm -rf / dir_name引发则表示未找到此类文件或目录。(刚刚测试过)
雷莫

3
@remo bro,您刚刚发布了相同的命令两次
Marcos Pereira

Answers:


149

假设$WORKING_DIR已设置为目录,则此单行代码应执行以下操作:

if [ -d "$WORKING_DIR" ]; then rm -Rf $WORKING_DIR; fi

(否则只需替换为您的目录)


161

为什么不只是使用rm -rf /some/dir?如果存在该目录,它将删除该目录,否则不执行任何操作。与rm -r /some/dir这种方式不同,如果文件夹不存在,命令不会崩溃。


13
我认为原始问题旨在表示:仅在文件/目录存在或不存在时才执行删除。该命令可能会起作用并产生相似的结果,但实际上在该命令更有意义之前进行了测试。
Ankur Chauhan

5
@AnkurChauhan +1,如果该目录不存在,我得到了警告。
inf3rno

12
这不是问题的答案。
xpto

10
如上所述,这不是答案。在删除詹金斯工作之前进行测试的一个原因是。如果该目录不存在,而您尝试将其删除,则该作业将失败。事先检查是更好的选择。
伐木工人

8
我认为这是正确的答案。它执行@remo所需的操作,即仅在目录存在时删除目录,而在目录不存在时不显示错误。也许这个问题提出得不太好,因为当此命令无关时,为什么还要检查是否存在?
pedram bashiri '18

32

尝试:

bash -c '[ -d my_mystery_dirname ] && run_this_command'

编辑:如果可以在远程计算机上运行bash,这将起作用。

编辑2:在bash中,[ -d something ]检查是否存在名为“ something”的目录,如果存在并且返回成功代码,则返回成功代码。仅当第一个命令成功时,使用&&链接命令才能运行第二个命令。因此[ -d somedir ] && command,仅在目录存在时才运行命令。


是的,并在外壳中尝试以确保它是您想要的。
sinelaw

首先,我想看看它是否在本地工作,我可以远程发送命令。我是不是在说要检查“ / test”目录。.只是[-d / test] && mkdir / test吗?
remo

1
如果该目录存在,它应该给出一个错误,因为它检查目录是否存在,如果是,它将尝试创建它。这就是对我所做的(刚刚经过测试)。它不应该创建目录。由于您想删除,您可能需要:([ -d /test ] && rmdir /test或rm -rf / test,如果它不会为空,并且您要删除所有内容)
sinelaw 2011年

@SineLaw:注意-当目录对我而言并尝试创建目录时,它没有错误!(再次测试)。但是对于DELETE,它确实有效。请仔细检查
雷莫

夏尔马:你在用bash吗?“ echo $ SHELL”怎么说?
sinelaw

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.