# 文件管理

- 本节贡献者: {{田冬冬}}、{{姚家园}}
- 最近更新日期: 2021-01-12
- 预计阅读时间: 20 分钟

---

采用合理的策略管理电脑文件是非常重要的。不合理的文件管理方式会使你花费更多的时间
去寻找文件，拖慢你的科研进度，还可能导致文件的大量冗余与误删。
这一节，我们总结了自己在科研工作中关于文件组织与管理的经验，供读者参考。

本文主要面向 Linux 和 macOS 用户，下面提到的**家目录**在 Linux 下指的是 {file}`/home/用户名`，
在 macOS 下指的是 {file}`/Users/用户名`。

## 基本原则

本文的文件组织与管理遵循如下几条基本原则：

1. 保持家目录干净整洁
2. 所有科研相关的文档、代码、图片等均放在家目录的子目录下
3. 家目录下的每个子目录都有特定的用途，用于放置特定的文件

## 目录结构

根据以上原则，推荐在家目录下建立如下子目录：

- Linux 或 macOS 系统在安装后自动创建的常见目录：

  - [](Desktop)
  - [](Documents)
  - [](Downloads)

- 为了满足日常科研需求，在家目录下新建的、用于存储科研相关文件的目录

  - [](ref:software)
  - [](src)
  - [](codes)
  - [](opt)
  - [](bin)
  - [](data)
  - [](projects)
  - [](workspace)

- 根据需求创建的其他目录

## 目录用途

根据原则 3，家目录下的每个子目录应有特定的用途。下面将详细阐述每个子目录的用途，
以及哪些文件应该放在哪个子目录下。

(ref:software)=
### software

该目录用于放置从网络上下载的软件包（如 SAC、GMT、TauP 等）的原始压缩包，
相当于一个备份。若压缩包数目较少，则所有软件压缩包都放在该目录下；
若压缩包数目很多，可以考虑根据软件的用途对软件进行分类，放在该目录的不同子目录下。
同时建议在该目录下建一个 README 文件，记录软件的名称、用途、
官方下载地址以及下载日期等。

(src)=
### src

该目录用于放置别人提供的科研相关的软件源码，每个软件对应 {file}`~/src` 目录下的
一个子目录。比如 fk、gCAP、distaz、GMT 等软件的源码都放在这里。

(codes)=
### codes

该目录用于放置自己写的具有**通用性**的软件包。这些软件包可以实现某类特定的
功能，且不局限于某一个特定的科研项目。

(opt)=
### opt

推荐将地震学相关软件安装到 {file}`~/opt` 目录下，而不要安装到
{file}`/opt/` 或 {file}`/usr/local` 下。

该目录下可放置两类科研相关软件：

1. 无需编译即可直接使用的软件，如 SAC、TauP、SOD 等
2. 需要编译并指定安装位置的软件，如 GMT

(bin)=
### bin

{file}`~/bin` 目录用于存放一些简单的可执行文件和工具型脚本。
将该目录的路径加入到环境变量 **PATH** 中，则可以在终端或脚本中直接调用
这些可执行文件与脚本。

可以基于如下原则决定是否要将某个可执行文件或脚本放在该目录下：

1. 若某个软件包只提供了单个可执行文件，则可放在该目录下
2. 若某个软件包的源码经过编译得到了单个可执行文件，则可将源码置于 {file}`~/src`
   目录下，而将可执行文件复制到 {file}`~/bin` 目录下，如 `distaz`
3. 自己写的一些常用工具型脚本（如定时备份脚本），可放在该目录下
4. 某些软件安装在其他路径，但只需要用到其中一个命令（如 Matlab）。此时可以在
   该目录下创建指向该命令的软链接。这样就不需要将该软件的安装路径添加到环境变量中了。

(data)=
### data

顾名思义，该目录主要用于保存一些基本不会改变的“数据”文件，比如地震波形数据、
中国国界线数据、中国断层数据、地震目录等。这些数据可以被多个不同的科研项目
共用。

(projects)=
### projects

该目录用于放置科研项目相关的文件，每个子目录对应一个科研项目。子目录下包含一个
科研项目相关的数据、代码、脚本、图片、结果等。例如：

- {file}`~/projects/NorthChina_MTZ` 是一个关于华北地区地幔过渡带的科研项目
- {file}`~/projects/GlobalICB` 是一个关于全球内核边界结构的科研项目

(Desktop)=
### Desktop

很多人习惯于将大量文件或当前在做的科研项目目录放在桌面上，这些都是不建议的方式。

桌面可以认为是另一个临时的文件夹。桌面上可以放置自己当前正在处理的一些文件，
比如正在做的幻灯片、正在填写的表格。一旦完成后，应将这些文件整理移动到其他目录下。

为了方便快速打开自己的科研项目目录，可以在桌面上建立一个指向当前在研项目
（位于 {file}`~/projects` 目录的子目录下）的软链接/快捷方式。当这一科研项目
已经做完后，即可从桌面上删除该软链接/快捷方式，而 {file}`~/projects` 目录下的
项目目录则可以保持不动。

(Documents)=
### Documents

用于存放个人文档。可自行根据自己的需求进一步创建子目录。

考虑到其他软件，如 Matlab、Zoom 等，也会在 {file}`~/Documents` 目录里创建子目录并
写文件，读者也可以考虑不使用 {file}`~/Documents` 目录，而自行在家目录下建立其他
用于存放个人文档的目录，比如目录 {file}`~/research` 用于存放科研相关的文档，
目录 {file}`~/life` 用于存放私人文档。

(Downloads)=
### Downloads

这是浏览器下载的默认目录。该目录仅作为临时存放文件的地方。
应不定期（比如每隔几天）清理不需要的文件，并将需要的文件（文章、软件包、图片等）
移动到相应的目录下。

(workspace)=
### workspace

用于做临时测试或做一些简单实验的目录。

日常科研中，有时忘了某个语法或某个命令，需要做一些测试检查自己的代码是否正确；
或者需要试某个命令的不同参数，看看结果上有什么差异；或者新下载了某个软件包，
想要随便跑一跑看看是否是自己所需要的。此时，可以到专门的目录 {file}`~/workspace`
做这些测试。这样的好处在于，避免向自己的家目录、科研项目目录或其他目录下写入
临时测试文件，同时在清理临时文件时也更加方便且不必担心误删其他重要文件。
