Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查目录是否存在,并在一个unix命令中删除_Unix - Fatal编程技术网

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

检查目录是否存在,并在一个unix命令中删除,unix,Unix,在Unix中,是否可以使用单个命令检查目录是否存在,如果存在则删除?我有一种情况,我使用ANT'sshexec'任务,在远程机器上只能运行一个命令。我需要检查目录是否存在并删除它…尝试: bash -c '[ -d my_mystery_dirname ] && run_this_command' 如果您可以在远程计算机上运行bash,这将起作用 在bash中,[-dsomething]检查是否有名为“something”的目录,如果它存在并且是一个目录,则返回一个成功代码。使

在Unix中,是否可以使用单个命令检查目录是否存在,如果存在则删除?我有一种情况,我使用ANT'sshexec'任务,在远程机器上只能运行一个命令。我需要检查目录是否存在并删除它…

尝试:

bash -c '[ -d my_mystery_dirname ] && run_this_command'
如果您可以在远程计算机上运行bash,这将起作用


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

为什么不直接使用
rm-rf/some/dir
?这将删除目录(如果存在),否则什么也不做。与
rm-r/some/dir
不同,如果文件夹不存在,这种风格的命令不会崩溃。

假设
$WORKING\u dir
设置为目录。。。这一班轮应该做到:

if[-d“$WORKING_DIR”];然后rm-Rf$WORKING_DIR;fi

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

这里是另一行:

[[ -d /tmp/test ]] && rm -r /tmp/test
  • &&表示仅当前面的 语句已成功执行(返回的退出代码为零)

是的,然后在shell中尝试,以确保它符合您的要求。首先,我想看看它是否在本地工作,然后我可以远程发送命令。我想说的是检查“/test”目录..just[-d/test]&&mkdir/test?如果它存在,它应该给出一个错误,因为它会检查目录是否存在,如果是,它会尝试创建它。这就是它对我的作用(刚刚测试过)。它不应该创建目录。由于您想要删除,您可能需要:
[-d/test]&&rmdir/test
(如果它不是空的,并且您想要删除所有内容,则需要rm-rf/test)@SineLaw:NOTE-当我的目录存在时,并尝试创建一个目录时,它没有出错!(再次测试)。但对于DELETE来说,它确实有效。沙玛:你在用bash吗?“echo$SHELL”是什么意思?为什么不直接使用rmdir呢?如果目录不存在,它将失败。它将失败。以及我的ANT脚本中的错误。这将导致我的构建崩溃。如果错误已经存在,则使用
mkdir-p
将忽略该错误。@Ferruccio-使用rm-rf/dir\u name不会引发错误,但rm-rf/dir\u name throws表示未找到此类文件或目录。(刚刚测试)@remo bro您刚刚发布了相同的命令twiceI我认为原始问题的意思是:仅当文件/目录存在或不存在时执行删除。此命令可能工作并产生类似的结果,但实际上在该命令更有意义之前进行了测试。@AnkurChauhan+1,如果目录不存在,我会收到警告。这不是问题的答案。如上所述,这不是答案。删除前进行测试的一个原因是Jenkins作业内部。如果目录不存在,而您尝试删除它,则作业将失败。事先检查是更好的选择。我认为这是正确的答案。它执行@remo所需的操作,即仅在目录存在时删除目录,如果目录不存在,则不会给出错误。也许这个问题不是很清楚,因为当这个命令不在乎的时候,为什么你需要检查它的存在?!