用于检查和创建目录的 shell 命令

用于检查和创建目录的 shell 命令

我正在编写一个 Ruby 脚本,我想在其中调用/执行一些外壳命令

我想运行的 shell 命令应该检查名为 ' 的目录tmp'/var/lib/mysql/是否存在。

  • 如果存在,删除里面的所有文件(包括子目录和文件)/var/lib/mysql/tmp/

  • 如果不存在,则创建它。

聚苯乙烯只有root用户可以访问/var/lib/mysql/

我知道mkdir会创建目录,但我不确定如何使用命令来检查目录是否存在

总的来说,我想要一些 shell 命令来实现上述场景,并且方式越优雅越好,因为我将在 ruby​​ 脚本中运行 shell 命令。

任何人都可以帮助我吗?

答案1

 [ -d /var/lib/mysql/tmp ] || mkdir /var/lib/mysql/tmp

你在找什么?man test详情请参阅。

或者实现您的两个目标:

 _DIR=/var/lib/mysql/tmp
 [ -d ${_DIR} ] && rm -rf ${_DIR}
 mkdir ${_DIR}

答案2

下面的两个 shell 命令就可以解决这个问题:

mkdir -p  /var/lib/mysql/tmp/    # create directories (that don't exist, yet)
rm    -rf /var/lib/mysql/tmp/*   # delete all files and sub-directories

注意:您可能需要在每行前面加上sudo使您的 Ruby 脚本能够以 root 权限执行 shell 命令。然而,正确设置 sudo 可能很棘手。


mkdir 的 -p 选项无需测试目录是否存在:

-p 根据需要创建中间目录。如果这个选项是
          未指定,每个操作数的完整路径前缀必须已经
          存在。另一方面,指定此选项后,不会出现错误
          如果已经作为操作数给出了目录,则会报告
          存在。中间目录是经过许可创建的
          由当前 umask 修改的“rwxrwxrwx”(0777)位,
          加上所有者的写入和搜索权限。

答案3

你可以使用

test -d /var/lib/mysql/tmp && rm -rf /var/lib/mysql/tmp/* || mkdir /var/lib/mysql/tmp

但我建议你使用ruby自己的内置函数来检查该目录是否存在,然后根据测试结果调用rm …or 。mkdir …

相关内容