管理文件和目录
移动、复制与删除:文件操作的核心命令
我们已经创建了一些文件和目录,接下来将学习如何对它们进行日常管理。虽然在图形界面中移动或重命名一两个文件很方便,但命令行在批量处理、或操作分散在不同位置的文件时,能展现出无与伦比的效率。
移动与重命名文件 (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. 删除目录 (rm
与 rmdir
)
如果我们尝试用 rm
删除目录,会发生什么?
rm folder_*
此时,终端会报错,提示 folder_1
是一个目录。这是 rm
命令的一个微小安全机制,它默认只删除文件。
要删除空目录,我们应该使用 rmdir
(remove directory) 命令:
rmdir folder_*
你可能会再次看到一个错误。ls
后会发现,大部分 folder_*
目录被删除了,但 folder_6
还在。这是因为 folder_6
内部还包含一个 folder 7
,rmdir
只会删除空目录。
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