管理文件和目录

发布于 2025-09-03 分类: Linux

移动、复制与删除:文件操作的核心命令

我们已经创建了一些文件和目录,接下来将学习如何对它们进行日常管理。虽然在图形界面中移动或重命名一两个文件很方便,但命令行在批量处理、或操作分散在不同位置的文件时,能展现出无与伦比的效率。

移动与重命名文件 (mv)

mv (move) 命令是你的文件“搬家公司”。它既可以移动文件,也可以为文件或目录重命名。

1. 移动文件到目录

让我们把 combined.txt 文件移动到 dir1 目录中:

mv combined.txt dir1

如何确认移动成功了?你可以先用 ls 检查当前目录(文件已消失),再 cd dir1 进入目录后用 ls 确认(文件已存在)。但更高效的方法是,直接让 ls 查看指定目录的内容:

ls dir1

2. 从目录移回文件

现在,我们想把文件移回来。我们可以进入 dir1 目录,然后执行 mv combined.txt .... 代表父目录)。

不过,我们有更简洁的方法,无需切换当前目录。就像 .. 代表父目录一样,一个单独的点 . 代表当前目录。结合通配符 *(匹配任意字符),我们可以用一行命令将 dir1 里的所有文件移回当前目录:

# 将 dir1 目录下的所有文件 (*) 移动到当前目录 (.)
# 注意 mv、* 和 . 之间都有空格
mv dir1/* .

3. 批量移动

mv 命令可以一次移动多个项目。只需将所有想移动的文件和目录列在前面,把目标目录放在最后即可。

例如,我们将 combined.txt、所有 test_n.txt 文件以及 dir3 目录,一次性全部移动到 dir2 中:

mv combined.txt test_* dir3 dir2
ls
ls dir2

4. 跨目录移动

命令行的强大之处在于,你可以在任何位置操作文件系统中的任何文件。假设我们想把 dir2 里的 combined.txt 移动到深层目录 dir4/dir5/dir6 中,可以直接指定完整路径:

mv dir2/combined.txt dir4/dir5/dir6
ls dir2
ls dir4/dir5/dir6

5. 重命名文件和目录

在命令行中,“重命名”被视为一种特殊的“移动”——从一个旧名字“移动”到一个新名字。因此,我们仍然使用 mv 命令。

重命名一个文件:

# 将 backup_combined.txt 重命名为 combined_backup.txt
mv backup_combined.txt combined_backup.txt
ls

这个技巧同样适用于目录,特别是处理那些带有空格的棘手名称。当文件名或目录名包含空格时,需要用引号 "" 将其括起来:

mv "folder 1" folder_1
mv "folder 2" folder_2
# ... 以此类推
ls

复制文件 (cp)

cp (copy) 命令用于创建文件或目录的副本。

1. 复制文件到另一个位置

让我们把深层目录中的 combined.txt 复制一份到当前目录(.):

cp dir4/dir5/dir6/combined.txt .
ls

执行后,你会发现原文件仍在原处,同时当前目录下多了一个同名副本。

2. 复制并重命名

如果想在复制的同时给副本起一个新名字,只需将新文件名作为命令的第二个参数:

cp combined.txt backup_combined.txt
ls

删除文件与目录

警告

接下来的操作将永久删除文件和目录。在继续之前,请务必使用 pwd 命令检查,确保你仍在教程目录(例如 /tmp/tutorial)中,以免误删个人重要文件。

1. 删除文件 (rm)

rm (remove) 命令用于删除一个或多个文件。

rm dir4/dir5/dir6/combined.txt combined_backup.txt

2. 删除目录 (rmrmdir)

如果我们尝试用 rm 删除目录,会发生什么?

rm folder_*

此时,终端会报错,提示 folder_1 是一个目录。这是 rm 命令的一个微小安全机制,它默认只删除文件。

要删除空目录,我们应该使用 rmdir (remove directory) 命令:

rmdir folder_*

你可能会再次看到一个错误。ls 后会发现,大部分 folder_* 目录被删除了,但 folder_6 还在。这是因为 folder_6 内部还包含一个 folder 7rmdir 只会删除空目录。

3. 递归删除 (rm -r)

如果我们确定要删除一个目录以及它内部的所有内容(包括子目录和文件),就需要给 rm 命令添加 -r (recursive, 递归) 选项。

# 这条命令会删除 folder_6 及其包含的所有内容
rm -r folder_6
ls

rm -r 非常方便,但也极其危险。一旦执行,无法撤销。

重要警告

与图形界面的回收站不同,rm 命令是彻底、永久、不可恢复的删除。

  • 谨慎使用通配符:一个无意的空格可能导致灾难。例如,rm t* 是删除所有以 t 开头的文件;而 rm t * 则是删除文件 t 以及当前目录下的所有文件!
  • 使用交互模式:如果你不确定,可以使用 -i (interactive) 选项。系统会在删除每个文件前都征求你的同意。输入 y 确认删除,n 保留,按 Ctrl-C 中断整个操作。
# 以交互模式删除所有 .txt 文件
rm -i *.txt

-- 感谢阅读 --