跳转至

文件、目录及其管理

文件和目录是计算机中最重要的概念之一,它们用于存储和组织计算机中的数据。

理解文件和目录

如果把硬盘看作一个图书馆,那么文件就可以看作是图书馆中的一本书。目录则可以理解为图书馆的房间、书架等,以及图书馆本身,用于组织和分类图书馆中的书籍。假如我想找到一本书,首先要知道它在哪个图书馆,其次是在哪个房间、哪个书架的哪个位置。这样就能够使用统一的方式来找到一本特定的书。

在任何计算机系统中,文件都可以看作是一些数据块。文件可以是文本文件、图片文件、音频文件、视频文件等。每一个文件都有一个唯一的名称,用于标识该文件。现代文件系统的文件名通常由字母、数字和特殊字符组成。在Windows上,文件名不区分大小写;在Linux和mac OS上,文件名区分大小写。

既然文件是一些数据块,那么就可以度量其大小。现代计算机使用二进制来表示数据,规定一个二进制位为1比特(bit),8个二进制位为1字节(Byte)。一个数据块占了多少二进制位,就可以说这个文件的大小是多少比特,或者占了比特数除以8的字节数。

在计算机上为了方便读取,之后的数据大小单位以 \(2^{10}=1024\) 为倍数递增,即1KiB=1024B,1MiB=1024KiB,1GiB=1024MiB,1TiB=1024GiB。Windows系统中的KB等单位指的实际上是KiB,这个是Windows本身的问题!而Linux和macOS则会正常显示KiB等。另外一套单位系统以1000为倍数递增,也就是1KB=1000B,1MB=1000KB,1GB=1000MB,1TB=1000GB。这种标定方式便于硬件的生产,因此通常由硬件厂商使用,我们在日常生活中看到的硬盘、U盘等存储设备的容量使用的就是这种方式。因此购买的硬盘,计算机认为的容量会比标定容量小一些——这是正常现象,你的空间没有被偷窃。在TB之上还有更大的PB、EB等单位,但我们日常生活中用不到。

Warning

有些无良卖家会使用这种单位:32Gb U盘,然后买到手发现只有4GB。这是因为该厂商使用了Gb(Gbit)而不是GB(GByte)来混淆视听,也就是32Gb=4GB,他甚至还没说谎,买家也只能打落牙齿往肚子里吞了。因此,购买存储设备时请务必注意单位究竟是什么。

在Windows系统中,每一个硬盘都是一个“根”目录,相当于图书馆本身。每一个根目录都有一个盘符,例如C盘、D盘等。每一个根目录下可以有多个子目录,这些目录往往表现为文件夹的形式;每一个子目录下又可以有多个子目录,最终形成树状结构。每一个目录下可以有多个文件(相当于图书馆中的书籍)。对于一个特定的文件,从根目录到所在地的路径是唯一的,例如 C:\Users\username\Documents\file.txt 。这个完整写出来的路径叫做绝对路径,它唯一地标识了一个文件的位置。

有时候,我们在图书馆找书的时候,知道同类的书籍往往放在一起。例如我们已经知道了这个书架上有某书第一卷,我们也知道同一个书架上还有第二卷,这时候就不需要再从图书馆的根目录开始找了,而是可以直接从这个书架上找。这时候我们可以说,第二卷的路径相对于第一卷的路径在同一个目录下。这个相对于某个目录的路径叫做相对路径,它并不是唯一的,因为它依赖于当前所在的目录。举个例子,假如某文件file1在某目录下,同目录下还有一个file2,那么file2相对于file1的路径就是file2;如果该目录下还有一个子目录dir,该子目录下有一个file3,那么file3相对于file1的路径就是dir\file3

有些时候,相对路径可能会跨目录,这时候就需要向上一级等操作。这时候,就可以使用..来表示上一级目录,使用.来表示当前目录。例如,假如某文件 file1 在某目录下,该目录的上一级目录下有一个 file2,那么 file2 相对于 file1 的路径就是..\file2。同样,如果该目录的上级目录下还有一个子目录 dir,该子目录下有一个 file3,那么 file3 相对于 file1 的路径就是 ..\dir\file3

文件的扩展名

扩展名是是文件名中最后一个点后面的部分,例如 file.txt 的扩展名是 txt。扩展名可以帮助操作系统识别文件的类型,并选择合适的程序来打开它。在 Windows 上,文件的扩展名往往是必须的,否则操作系统不能识别文件的类型。

在 Windows 系统中,文件的扩展名通常是隐藏的。如果你想查看文件的扩展名,可以在文件资源管理器中点击“查看”菜单,然后选择“文件扩展名”选项。这样就可以看到所有文件的扩展名了。为了方便维护目录等,笔者建议同学们选择显示扩展名。

常见文件类型 常见扩展名
文本文件 txt md log
文档文件 doc xls ppt pdf
图片文件 jpg jpeg png bmp svg
音频文件 mp3 wav flac aac
视频文件 mp4 avi mkv mov
压缩文件 zip rar 7z tar.gz
可执行文件 exe bat sh
代码文件 c cpp py java

一般情况下,虽然文件的类型差不多,但是其扩展名不同也往往代表着其数据的存储是按照不同的方式进行的。例如,bmp 文件是“位图”,存储的是每一个像素的颜色信息;而 jpg文件则是经过压缩的,存储的是图像的整体信息。对于同一张图片,bmp 文件往往会比 jpg 文件大得多。如果我们试图将一个 bmp 文件改扩展名为 jpg,那么这个文件的扩展名变了,但是其内部数据并没有变,因此这个文件仍然是一个 bmp 文件,只不过扩展名变了而已。此时,如果我们使用图片查看器打开这个文件,图片查看器会根据扩展名来判断文件类型,认为它是一个 jpg 文件,但是实际上它是一个 bmp 文件,因此图片查看器可能无法正确地打开它。因此,技术人说的“一类文件”往往不是按文件的性质分类的,而是按文件的扩展名(数据的存储方式)分类的。

有时候,我们希望改变文件的类型。从上面的说明可以看出,直接更改扩展名并不能改变文件的类型。因此我们需要使用专门的网站或软件来帮助我们转换文件的类型;转换后,文件的扩展名和内部数据都会发生变化。

文件的打开方式

对于任何文件,我们往往需要读取其中的数据,这个文件才有意义。因此,我们需要一些软件来帮助我们打开文件。

在 Windows 系统中,文件往往有一个默认的打开方式,这个打开方式由文件的扩展名决定。例如,txt 文件默认使用记事本打开,jpg 文件默认使用照片查看器打开。有些时候安装了一些软件后,文件的默认打开方式可能会被更改。例如,安装了某个图片编辑软件后,jpg 文件的默认打开方式可能会被更改为该软件。

在一些情况下,我们可能会需要临时或永久更改某一类文件或者某一个文件的打开方式。我们可以右键点击文件,然后选择“打开方式”选项,选择一个合适的软件来打开该文件,也可以选择“选择其他应用”之后寻找指定的软件。如果我们想要永久更改某一类文件的默认打开方式,只需要在“选择其他应用”菜单勾选“始终使用此应用打开此类文件”选项即可。

值得注意的是,软件本身并不需要扩展名才能打开文件。软件打开文件时总是按照自己的方式来处理数据,因此很多时候即使扩展名是错误的或者没有扩展名,如果指定了正确的软件,软件仍然可以正确地打开文件。

文件的链接

有时候,我们可能会需要在不同的目录中使用同一个文件或目录,这时候就可以使用文件的链接。文件的链接类似于图书馆中的索引卡片,它指向某个文件的位置,而不是文件本身。

在 Windows 中,文件的链接叫做快捷方式。我们可以右键点击文件,然后选择“创建快捷方式”选项,Windows 会在当前目录下创建一个指向该文件的快捷方式。我们也可以将快捷方式移动到其他目录中使用。需要注意的是,快捷方式本身并不包含文件的数据,因此如果原文件被删除或者移动,快捷方式往往无法正常工作。另一方面,即使我们对快捷方式进行任意的删除或移动,原文件仍然完好无损。

上述建立链接的方式叫做软链接(符号链接)。与之相对的是硬链接,硬链接是指多个文件名指向同一个文件的数据。硬链接的创建和管理比较复杂,一般不建议初学者使用。

文件的压缩和解压

有时候文件占据了过大的空间,或者因为文件数量太多而不便于传输和管理,这时候我们可以使用文件压缩工具来将文件进行压缩。文件压缩工具可以将多个文件或者目录打包成一个文件,并且可以对文件进行压缩,以减少文件的大小。

笔者个人推荐使用 7z 压缩软件来压缩和解压文件。它是一个经典的开源软件,支持多种压缩格式,并且具有较高的压缩率。一般情况下,在我们安装了 7z 软件之后,右键点击文件或者目录,就可以看到“添加到压缩文件”选项,点击该选项即可将文件或者目录进行压缩。对于压缩文件,我们也可以右键点击,然后选择“解压到当前目录”选项,或者选择“解压到文件名\”选项,将文件解压到指定的目录中。

不同的压缩参数会产生不同的效果。把固实数据大小开大则会提高压缩率,但会牺牲压缩和解压的速度;勾选了分卷,则会将压缩文件分割成多个小文件,便于诸如 FAT32 等不支持大文件的文件系统存储;使用内存和 CPU 则显著影响了压缩的速度;不同的压缩算法则会影响压缩率和速度的平衡。一般情况下,默认参数已经足够好用了,软件本身也提供了多种预设参数供我们选择。

至于压缩成的文件格式,笔者比较推荐使用 zip 格式,其兼容性最好;如果对压缩率有较高要求,可以使用 7z 格式。不建议使用 rar 格式,因为它是一个专有格式,虽然压缩率不错,但是不够开放。

有些软件的可执行文件和附带文件是通过压缩包分发的;有些文件也是通过压缩包传输的。在这种情况下,我们一定要先解压文件,再使用文件,而不是在压缩包中直接使用文件,这样可能会导致文件无法正常工作。

高效的文件管理

从一大堆文件中快速找到我们想要的文件是一个非常重要的技能。

一个常用的手段是使用搜索功能。Windows 文件资源管理器提供了搜索功能,可以帮助我们找到文件。我们可以在文件资源管理器的右上角输入关键词,文件资源管理器会自动搜索当前目录及其子目录中的文件,并显示匹配的结果。然而,文件管理器的搜索面对大量文件时效率很低。这时候,我们可以使用一些第三方的搜索工具,例如 Everything、Listary 等。这些工具可以快速索引计算机中的文件,并提供快速的搜索功能。它们通常比文件资源管理器的搜索功能更快、更强大。

另一个常用的手段是养成良好的存储习惯,将相关的文件放在一起,使用有意义的文件名和标签、分类等工具。Windows 没有内置的标签功能,但我们可以使用一些第三方的标签工具,例如TagSpaces、FileMeta 等。对于大量的文件,我们可以使用自动化脚本来帮助我们管理文件,例如使用 Python 脚本来批量重命名文件、移动文件等。

在 Windows 上,一个简单的批量处理文件的方式是使用 PowerShell 脚本或旧式风格的批处理脚本(.bat 文件)。这些脚本可以帮助我们自动化一些重复性的任务,提高工作效率。例如,我们希望把某目录下的许多图片都改名为“图片 1.jpg”、“图片 2.jpg”等等,可以使用以下powershell代码实现:

$i = 1
Get-ChildItem -Path "C:\path\to\your\images" -Filter *.jpg | ForEach-Object {
  $newName = "图片$i.jpg"
  Rename-Item $_.FullName -NewName $newName
  $i++
}

当然用python的os库也行。使用这些工具可以帮助我们更高效地管理文件,避免手动操作的繁琐和错误。