我正在编写一个 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 …