💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 使用命令行工具管理文件 ## 目标 能够在各种目录中创建、复制、链接、移动和删除文件与子目录。 ## 命令行文件管理 文件管理涉及创建、删除、复制和移动文件。此外,也可以创建、删除、复制和移动目录,以帮助有条理地整理文件。在命令行执行文件管理时,要求知道当前的工作目录,这样才能为直接任务选用绝对或相对路径语法以实现最该效率。 ### 文件管理器命令 | 文件管理命令 | 单一来源 | 多来源 | | --- | --- | --- | | 复制文件 | cp file1 file2 | cp file1 file2 file3 dir④ | | 移动文件 | mv file1 file2① | mv file1 file2 file3 dir④ | | 删除文件 | rm file1 | rm -f file1 file2 file3⑤ | | 创建目录 | mkdir dir | mkdir -p part1/part2/dir⑥ | | 复制目录 | cp -r dir1 dir2② | cp -r dir1 dir2 dir3 dir4④ | | 移动目录 | mv dir1 dir2③ | mv dir1 dir2 dir3 dir4④ | | 删除目录 | rm -r dir1② | rm -rf dir1 dir2 dir3⑤ | --- | 注: | ①结果为重命名。<br>②需要使用“递归”选项来处理来源目录。<br>③如果 dir2 存在,则结果为移动。如果 dir2 不存在,则结果为重命名。<br>④最后一个参数必须是目录。<br>⑤请谨慎使用“force”选项,系统将不会提示您确认操作。<br>⑥使用“创建父级”选项时应小心;无法捕获键入错误。 | | --- | --- | #### 创建目录 mkdir 命令创建一个或多个目录或子目录;如果文件名已存在,或者尝试在不存在的父目录中创建目录,将生成错误。-p 父级选项将为请求的目标位置创建缺失的父目录。使用 mkdir -p 时应小心,因为意外拼写错误将创建不需要的目录,而不会生成错误信息。 在以下示例中,用户尝试使用 mkdir 在现有的 Videos 目录中创建名为 Watched 的子目录,但是却写错目录名称。 ~~~ [student@desktopX~]$ mkdir Video/Watched mkdir: cannot create directory 'Video/Watched': No such file or directory ~~~ mkdir 运行失败,因为将 Videos 拼写错误,而且目录 Video 也不存在。假如用户是将 mkdir 与 -p 选项结合使用,则不会出现错误,而且用户会得到两个目录:Videos 和 Video,同时会在错误的位置中创建子目录 Watched。 ~~~ [student@desktopX~]$ mkdir Videos/Watched [student@desktopX~]$ cd Documents [student@desktopX Documents]$ mkdir projectX ProjectY [student@desktopX Documents]$ mkdir -p Thesis/Chapter1 Thesis/Chapter2 Thesis/Chapter3 [student@desktopX Documents]$ cd [student@desktopX~]$ ls -R Videos Documents Documents: ProjectX ProjectY Thesis thesis_chapter1.odf thesis_chapter2.odf Documents/ProjectX: Documents/ProjectY: Documents/Thesis: Chapter1 Chapter2 Chapter3 Documents/Thesis/Chapter1: Documents/Thesis/Chapter2: Documents/Thesis/Chapter3: Videos: blockbusterl.ogg blockbuster2.ogg Watched Videos/Watched: [student@desktopX~]$ ~~~ 最后一个 mkdir 通过一个命令创建了三个 ChapterN 子目录。-p 父级消息创建缺少的父目录 Thesis。 #### 复制文件 cp 命令复制一个或多个文件,成为新的独立文件。其语法允许将一个现有文件复制为当前或另一目录中的一个新文件,或者将多个文件复制到另一目录中。在任何目标位置上,新文件名都必须唯一。如果新文件名不唯一,那么复制命令将覆盖现有文件。 ~~~ [student@desktopX~]$ cd Videos [student@desktopX Videos]$ cp blockbusterl.ogg blockbuster3.ogg [student@desktopX Videos]$ ls -l total 0 -rw-rw-r--. student student 0 Feb 8 16:23 blockbuster1.ogg -rw-rw-r--. student student 0 Feb 8 16:24 blockbuster2.ogg -rw-rw-r--. student student 0 Feb 8 19:02 blockbuster3.ogg drwxrwxr-x. student student 4096 Feb 8 23:35 Watched [student@desktopX Videos]$ ~~~ 在通过一个命令复制多个文件时,最后一个参数必须为目录。复制的文件在新的目录中保留其原有名称。目标位置上存在的冲突文件名可能会被覆盖。为防止用户意外覆盖带有内容的目录,多文件 cp 命令将忽略指定为来源的目录。复制带有内容的非空目录要求使用 -r 递归选项。 ~~~ [student@desktopX Videos]$ cd ../Documents [student@desktopX Documents]$ cp thesis_chapter1.odf thesis_chapter2.odf Thesis ProjectX cp: omitting directory 'Thesis' [student@desktopX Documents]$ cp -r Thesis ProjectX [student@desktopX Documents]$ cp thesis_chapter2.odf Thesis/Chapter2/ [student@desktopX Documents]$ ls -R .: ProjectX ProjectY Thesis thesis_Chapter1.odf thesis_chapter2.odf ./ProjectX: Thesis thesis_Chapter1.odf thesis_Chapter2.odf ./ProjectX/Thesis: ./ProjectY: ./Thesis: Chapter1 Chapter2 Chapter3 ./Thesis/Chapter1: ./Thesis/Chapter2: thesis_Chapter2.odf ./Thesis/Chapter3: [student@desktopX Documents]$ ~~~ 在第一个 cp 命令中,Thesis 未能被复制,但 thesis_chapter1.odf 和 thesis_chapter2.odf 复制成功。使用 -r 递归选项时,复制 Thesis 成功。 #### 移动文件 mv 命令在同一目录中重命名文件,或者将文件重新放到新的目录中。文件内容保持不变。将文件移动另一文件系统时要求通过复制源文件创建新的文件,然后再删除源文件。尽管通常对用户透明,但移动大型文件所需时间可能会明显较长。 ~~~ [student@desktopX Videos]$ cd ../Documents [student@desktopX Documents]$ ls -l total 0 -rw-rw-r--. student student 0 Feb 8 16:24 thesis_chapter1.odf -rw-rw-r--. student student 0 Feb 8 16:14 thesis_chapter2.odf [student@desktopX Documents]$ mv thesis_chapter2.odf thesis_chapter2_reviewed.odf [student@desktopX Documents]$ mv thesis_chapter1.odf Thesis/Chapter1 [student@desktopX Documents]$ ls -lR .: total 16 drwxrwxr-x. 2 student student 4096 Feb 11 11:58 ProjectX drwxrwxr-x. 2 student student 4096 Feb 11 11:55 ProjectY drwxrwxr-x. 5 student student 4096 Feb 11 11:56 Thesis -rw-rw-r--. 1 student student 0 Feb 11 11:54 thesis_chapter2_reviewed.odf ./ProjectX: total 0 -rw-rw-r--. 1 student student 0 Feb 11 11:58 thesis_chapter1.odf -rw-rw-r--. 1 student student 0 Feb 11 11:58 thesis_chapter2.odf ./ProjectX/Thesis: total 0 ./ProjectY: total 0 ./Thesis: total 12 drwxrwxr-x. 2 student student 4096 Feb 11 11:59 Chapter1 drwxrwxr-x. 2 student student 4096 Feb 11 11:56 Chapter2 drwxrwxr-x. 2 student student 4096 Feb 11 11:56 Chapter3 ./Thesis/Chapter1: total 0 -rw-rw-r--. 1 student student 0 Feb 11 11:54 thesis_chapter1.odf ./Thesis/Chapter2: total 0 -rw-rw-r--. 1 student student 0 Feb 11 11:54 thesis_chapter2.odf ./Thesis/Chapter3: total 0 [student@desktopX Documents]$ ~~~ 第一个 mv 命令时重命名文件的示例。第二个命令会导致文件重新放置到另外目录中。 #### 删除文件和目录 rm 的默认语法将删除文件,而不是目录。要删除目录以及其下可能存在的许多子目录和文件,需要使用 -r 递归选项。没有命令行取消删除功能,也没有可以从中恢复的垃圾箱。 ~~~ [student@desktopX Documents]$ pwd /home/student/Documents [student@desktopX Documents]$ rm thesis_chapter2_reviewed.odf [student@desktopX Documents]$ rm Thesis/Chapter1 rm: cannot remove 'Thesis/Chapter1': Is a directory [student@desktopX Documents]$ rm -r Thesis/Chapter1 [student@desktopX Documents]$ ls -l Thesis total 8 drwxrwxr-x. 2 student student 4096 Feb 11 12:47 Chapter2 drwxrwxr-x. 2 student student 4096 Feb 11 12:48 Chapter3 [student@desktopX Documents]$ rm -ri Thesis rm: descend into directory 'Thesis'? y rm: descend into directory 'Thesis/Chapter2'? y rm: remove regular empty file 'Thesis/Chapter2/thesis_chapter2.opf' y rm: remove directory 'Thesis/Chapter2'? y rm: remove directory 'Thesis/Chapter3'? y rm: remove directory 'Thesis'? y [student@desktopX Documents]$ ~~~ 在 rm 未能删除 Chapter1 目录后,-r 递归选项成功执行了删除。最后一个 rm 命令首先解析到各个子目录,逐一删除其中包含的文件,然后删除各个现在为空的目录。如果使用 -i,则将以交互方式提示每个删除操作。这基本上与 -f 是相反的,后者将强制进行删除而不会提示用户。 rmdir 命令仅删除空的目录。删除的目录无法取消删除。 ~~~ [student@desktopX Documents]$ pwd /home/student/Documents [student@desktopX Documents]$ rmdir ProjectY [student@desktopX Documents]$ rmdir ProjectX rmdir: failed to remove 'ProjectX': Directory not empty [student@desktopX Documents]$ rm -r ProjectX [student@desktopX Documents]$ ls -lR .: total 0 [student@desktopX Documents]$ ~~~ rmdir 命令未能删除非空目录 ProjectX,但 rm -r 成功执行了删除。 ### 参考 cp、mkdir、mv 和 rmdir man page