命令行教程,第二部分 — 创建和删除文件
在上一课中,我们学习了使用 pwd
、ls
、open
和 cd
命令,实现了从计算机文件树中来回移动。下一步就该学习如何创建、删除文件和目录。在本课中,我们的学习重点是使用两个新的命令创建文件和文件夹:touch
和 mkdir
。为了演示如何使用这两个命令,我们创建一个文件结构来表示一个非常简单的动物等级系统。
创建目录和文件
首先,我们来花点时间想一想如何使用 GUI 创建文件夹。在 Mac 电脑上,我们可以通过如下方式来实现:打开 Finder 然后在菜单栏中选择 File
→ New Folder
。
我们来学习一下如何使用命令行来得到同样的结果。
mkdir
命令
mkdir
是我们用来创建目录的命令(通常发音为 make-dir 或者 “M”-“K”-“dir”),它会创建由我们提供的名称命名的新文件夹。比如,如果你在 Desktop
目录,想要在当前位置创建一个 animals
(动物)目录,你将键入以下命令:
~/Desktop $ mkdir animals
如果你想要在 animals
目录中创建一个rodents
(啮齿动物)目录,你可以执行以下任一操作(从 Desktop
开始):
- 使用
cd
跳转到animals
然后键入mkdir rodents
- 直接在当前
Desktop
目录运行命令mkdir animals/rodents
我们能够使用的方法并不只有这两种,但它们是最为实用的。
创建多个目录
我们也可以通过提供以空格分开的所有目录名称的形式使用 mkdir
命令一次性批量创建多个目录。例如,要在 animals
目录中创建 marsupials
、cloven_hoofed_animals
和 carnivores
目录,我们可以编写如下命令行:
~/Desktop/animals $ mkdir marsupials cloven_hoofed_animals carnivores
注意: 你应该避免在目录名和文件名中使用空格(而是使用下划线如 cloven_hoofed_animals
)。如果不可避免 —— 也许遇到以前创建的文件或目录名称中有空格,可以在空格之前插入一个转义字符(\
),告诉 shell 如何正确得解释文件名中的空格,比如 mkdir cloven\ hoofed\ animals
。
touch
命令
在工作目录中创建一个文件
到目前为止,你最有可能创建并保存文件的方式就是使用一个特定的应用程序 —— 比如:在 Microsoft Word 中创建一个 .docx
文件、在 Adobe Acrobat 中创建一个 .pdf
文件、或者在文本编辑器中创建一个 .html
文件。在命令行中,你可以使用 touch
命令在你的工作目录下创建一个文件。touch
命令会创建一个带有你提供的名称和文件扩展名的新(空)文件。例如,如果你在 Desktop
目录中,想要在该目录创建一个文件 first_file.txt
,你可以键入如下命令:
~/Desktop $ touch first_file.txt
包含文件扩展名(在以上示例中是.txt
)是至关重要的,因为它设置了文件类型。 运行上述命令,然后列出 Desktop
目录的内容,来确认确实创建了名为 first_file.txt
的文本文件。
在工作目录以外的目录中创建文件
你也可以使用 touch
命令在其他目录而不是当前目录创建新文件。创建方法是在文件名前面 添加 通往文件存放位置的路径。例如,要在 Desktop
工作目录中,创建位于更深层的文件结构中的文件 capybara.txt
,给定以下文件结构:
示例文件结构:
- 主目录
~
→Desktop
目录 →animals
目录 →rodents
目录 →capybara.txt
文件
要创建该文件,需要运行以下命令:
~/Desktop $ touch animals/rodents/capybara.txt
列出 rodents
目录的内容(在 ~/Desktop/animals/rodents
)将会确认新文件 capybara.txt
的存在,如下所示:
创建多个文件
你可以通过提供多个文件名(包括任何适当的前置路径),以空格分隔,通过 touch
命令创建多个文件。例如,下面的代码将创建两个文件:
- 一个文件叫做
kangaroo.txt
位于:~
→Desktop
→animals
→marsupials
- 另一个文件叫做
giraffe.txt
位于:~
→Desktop
→animals
→cloven_hoofed_animals
~/Desktop $ touch animals/marsupials/kangaroo.txt animals/cloven_hoofed_animals/giraffe.txt
创建不同的文件类型
最后,请注意,使用 touch
命令不仅仅限于创建文本文件,你可以创建任何文件类型。例如,以下命令将在 Desktop
工作目录中创建一个名为 test.py
的 Python 文件:
~/Desktop $ touch test.py
删除目录和文件
在本节中,你将学习如何使用 rm
命令永久删除目录和文件。我们将从删除文件开始,因为它比删除目录要简单得多。
删除文件
rm
命令
你可以使用 rm
命令(意为删除 remove)删除指定的文件。请注意这个删除是永久的 —— 它不能被逆转。只有当你确定想删除某些东西时,才使用 rm
。
我们来看一个例子。如果要删除位于 Desktop
目录中的名为 first_file.txt
的文件,则可以运行以下命令:
~/Desktop $ rm first_file.txt
删除多个文件可以通过提供以空格分隔的文件名列表来实现。例如,下面的图片演示中,我们使用 touch
命令在 Desktop
目录下创建三个文本文件 —— apples.txt
、carrots.txt
和 fruits.txt
—— 然后使用 rm
命令删除(永久删除)这些文件。完成此次删除的代码如下:
$ rm apples.txt carrots.txt fruits.txt`
删除目录
你刚刚学习了如何使用 rm
命令删除文件。在这里,我们将讲授两种方式来删除目录:
- 使用
rmdir
命令 - 使用
rm -r
命令(注意:谨慎操作)
rmdir
命令
rmdir
命令可以用来删除目录,但是要注意,它只能删除空目录。例如,你可以使用 mkdir
在 Desktop
目录内创建一个名为 cats
的目录。因为 cats
只是一个空目录(没有添加任何东西),你可以使用 rmdir
命令删除 cats
目录,如下图所示。
但是,如果你尝试在不为空的目录上运行 rmdir
,则会收到一条错误消息。例如,如果你创建一个 cats
目录,然后向其中添加文件(例如 munchkin.txt
和 tabby.rb
),那么你将无法使用 rmdir
删除 cats
目录,如下图所示。
一个潜在的解决方案是首先将目录的内容每次删除一个文件(使用上面学到的 rm
命令),然后使用 rmdir
删除空的目录,但如果目录包含很多文件,这可能很低效。下一节将展示更快的方法。
rm -r
命令
如上所述,使用 rmdir
删除目录有一些限制,因为它只能删除空目录。在这里,你将学习如何删除包括内容的目录,通过执行稍微不同版本的 rm
,你之前用来删除文件的命令。
要删除目录,可以在 rm
命令中添加一个名为 flag(标记)或 option(选项)的内容。标记提供额外的执行指令,位于命令名和参数之间,用短划线符号(-
)表示。我们将在本节中使用的完整命令是 rm -r
,其中 r
代表 recursive(递归)。
警告: 在继续之前,你应该知道递归删除意味着删除目录的所有内容 —— 包括其文件、子目录以及这些子目录中的所有文件等等。此外,使用 rm -r
删除是一个永久的动作。你可以使用一行简单的代码不可逆地删除大量文件。
我们来看一个例子。如果要删除位于 Desktop
目录中的名为 cats
的非空目录,则可以使用以下命令:
~/Desktop $ rm -r cats
如果你想要被要求确认删除目录中包含的各个项目,则可以将 interactive(互动)-i
标记添加到命令中,或将其与 -r
标记结合(例如rm -ri
)或通过单独添加(例如 rm -r -i
)。举例来说,如果 cats
目录碰巧包含两个文件(file_1.txt
和 file_2.txt
)和四个子目录(calico
、persian
、scottish_fold
和 siamese
),你可以使用以下命令,在确认要删除的几个内容后再删除 cats
目录:
~/Desktop $ rm -ri cats
要进行这些确认,你可以直接输入 yes
或 y
。下图显示了这种互动。