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

rem*_*emo 91 unix

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

Nic*_*aly 130

假设$WORKING_DIR设置为目录...这个单行应该这样做:

if [ -d "$WORKING_DIR" ]; then rm -Rf $WORKING_DIR; fi
Run Code Online (Sandbox Code Playgroud)

(否则只需替换你的目录)


Dom*_*ell 121

为什么不用rm -rf /some/dir?这将删除目录,如果它存在,否则什么都不做.

  • 我认为原始问题的意思是:仅在文件/目录存在或不存在时执行删除.此命令可以工作并产生类似的结果,但实际上在命令更有意义之前进行测试. (13认同)
  • 这不是问题的答案. (11认同)
  • 如上所述,这不是答案.在删除之前进行测试的一个原因是在Jenkins工作中.如果该目录不存在并且您尝试将其删除,则该作业将失败.事先检查是更好的选择. (8认同)
  • 我认为这是正确的答案.它执行@remo所需要的操作,即仅在目录存在时删除目录,如果不存在则不给出错误.也许问题不是很好,因为为什么这个命令不关心时需要检查存在?! (8认同)
  • @AnkurChauhan +1,如果dir不存在,我会收到警告. (4认同)
  • 如果目录不存在,而“rm -rf dir”不存在,则在 npm 脚本中使用它并仅使用“rm dir”会引发错误。所以这个答案肯定有效 (3认同)

sin*_*law 29

尝试:

bash -c '[ -d my_mystery_dirname ] && run_this_command'
Run Code Online (Sandbox Code Playgroud)

编辑:如果您可以在远程计算机上运行bash,这将工作....

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


小智 14

这是另一条内线:

[[ -d /tmp/test ]] && rm -r /tmp/test
Run Code Online (Sandbox Code Playgroud)
  • && 表示仅当前面的语句执行成功时才执行后面的语句(返回退出代码为零)