nux*_*nux 13 command-line backup directory mkdir
我有一个foo
位于~/Desktop
. 假设我想从具有相同名称和相同位置的终端创建一个目录。当我尝试时,mkdir
它给出了一个错误:
mkdir: cannot create directory `/home/nux/Desktop/foo': File exists
Run Code Online (Sandbox Code Playgroud)
这是有道理的,但foo
如果存在,我想替换。我看了一遍,man mkdir
但没有任何选项可以做到这一点。
那么如何覆盖foo
目录呢?
为什么没有mkdir
选择这样做?
Eli*_*gan 25
如果您的目标是执行单行命令:
~/Desktop/foo
如果目录已经存在,则删除并重新创建该目录。~/Desktop/foo
如果目录不存在,则创建该目录。然后你可以使用:
rm -r ~/Desktop/foo; mkdir ~/Desktop/foo
Run Code Online (Sandbox Code Playgroud)
;
相当于换行符,但它允许您在一行上执行多个命令(即,作为“单个命令”)。
-f
标志来删除它们而不以交互方式提示用户。这没关系,但我建议特别小心使用rm -rf ...
. 详情请参阅man rm
。rm
命令来完成的前mkdir
命令执行; 这就是使用;
而不是的原因&
。(前面的命令&
在后台异步运行。)mkdir
时运行该rm
命令;这就是使用;
而不是的原因||
。mkdir
命令rm
失败时运行该命令(通常失败意味着目录不存在);这就是使用;
而不是的原因&&
。rm
即使目录已经存在,该命令也可能会失败,在这种情况下,该mkdir
命令也会失败,但错误消息是有意义的,并且foo
在尝试创建它之前可能不需要添加检查's 存在的中间步骤。有关、、 和运算符的更多信息和说明,请参阅Bash 参考手册中的3.2.3 命令列表。;
&
||
&&
正如muru 建议的(和Rinzwind 详细阐述的),我建议您研究一下rsync
它是否能满足您的备份需求。在rsync 文档页面以及这个 Ubuntu rsync指南上还有一些其他有用的指南。
为什么 mkdir 没有这个选项?
mkdir
创建目录(“mk”代表“make”)。因为它也递归地删除目录和其中的所有文件将是不好的,因为它会以可能导致数据丢失的方式违反最小惊讶原则。
rmdir
甚至不删除包含任何(非目录)文件的目录。rm
有一个-r
选项,这是有道理的,因为rm
期望删除文件(这是它的目的,因此固有的危险是直观的,用户通常知道在运行rm
命令时要小心)。
不,没有单一的命令可以执行您的要求。
为什么?
这就是 Unix 的哲学:编写只做一件事并把它做好的程序。编写程序以协同工作。1
在这种情况下,mkdir
和rm
命令执行您的要求,并且可以很好地协同工作,因为rm -r
也会删除目录,因此后续mkdir
将创建目录。
1 The Art of Unix Programming , Eric S. Raymond,本身引用了 Doug McIlroy。
归档时间: |
|
查看次数: |
66136 次 |
最近记录: |