我认为没有理由不应该默认设置-p
标志mkdir
。
-p, --parents no error if existing, make parent directories as needed
Run Code Online (Sandbox Code Playgroud)
从我所见,这是一个非破坏性命令。我是否错过了有关其工作方式的重要内容?
其次,是否有一种简单的方法可以将其设为mkdir
?
ktf*_*ktf 16
当然,有人可能会争辩说,父目录的创建应该是默认的,如果父目录不存在,可以使用一些检查选项来阻止目录的创建。
但相反的原因只是历史。mkdir的基本版本没有创建父目录。这就是为什么 X11 发行版带有一个名为mkdirhier的命令能够完成这个任务:检查父目录是否存在并在必要时创建它们。
后来这个功能被添加到许多 UNIX 版本的命令mkdir 中(我不知道现在是否在 POSIX 标准中)。为了保持兼容性,通过打开选项标志使此功能可用:-p
。
为什么默认情况下打开它很糟糕?如果父目录不存在,脚本可能依赖于mkdir失败。特别是作为root用户,默认情况下创建目录树可能很危险。
例子:
if mkdir /backup/$(uname -n)/$(date +%Y%m%d)
then
perform_backup ...
Run Code Online (Sandbox Code Playgroud)
在此示例中,即使文件系统/backup
未安装且父项/backup/$(uname -n)
不存在,如果默认情况相反,将创建目录并执行备份。
经验法则:最好不要更改任何工具的默认行为。如果需要,请提供允许更改默认行为的选项。
这是一个可选功能,并不总是需要的 - 特别是在脚本中。对于脚本,请考虑以下缺点:
/usr/local/lib/GreatSoftware/ImportantPartOfIt
,但这些库依赖于 / 链接到/usr/local/lib/GreatSoftware
. 如果缺少此项,则脚本不应继续。的通用行为mkdir
使它变得容易和自然,因为这种情况会被报告并且可以立即被发现。
如果您想始终mkdir -p
在 shell 中使用,您可以为其创建别名:
alias mkdir='mkdir -p'
Run Code Online (Sandbox Code Playgroud)
(这应该转到您的.bashrc
或您的 shell 使用的任何配置。)