GNU/Linux 技巧:如何快速的找到一个文件

8 min read

在使用计算机的过程中,我们都有着这么一个需求:找文件!!

“卧槽,我的 XXX 文件放哪儿去了?”Σ(っ °Д °;)っ

“XXX 文件不应该就在 XXX 文件夹里吗?!咋个找球不到啊?”‧º·(˚ ˃̣̣̥᷄⌓˂̣̣̥᷅ )‧º·˚

“MMP!1000 多个文件!我找你麻痹!!”(╯‵□′)╯︵┴─┴

在一些没有 GUI 的 GNU/Linux 中,遇到这种情况更是雪上加霜。好在 GNU/Linux 的终端中有着不少优秀的命令行工具,可以帮助我们解决上述问题。

下面就介绍三个最常用的在 GNU/Linux 中快速找文件的命令行工具:lstreefind

ls

ls 可能是所有 Linuxer 学习到的第一个命令了 {{< spoiler >}}cd: 喵喵喵?{{< /spoiler >}} 它既简单又实用,如果给 GNU/Linux 中所有的命令使用频率排个名的话,ls 绝对在前 5。

ls 的作用就是列出指定目录下 (默认当前目录) 的所有可见的文件与文件夹,就像这样:

$ ls
Desktop  Documents  Downloads  Dropbox  Music  Pictures  Public  Steam  Templates  Videos

添加 -l 选项则可以查看文件的更多信息。同时再加上 -h 则可查看到文件文件的大小:

$ ls -lh
drwxr-xr-x 2 mogeko mogeko 4.0K 11月 21 21:24 Desktop
drwxr-xr-x 3 mogeko mogeko 4.0K 11月 21 12:39 Documents
drwxr-xr-x 4 mogeko mogeko 4.0K 11月 21 20:37 Downloads
drwxrwx--- 5 mogeko mogeko 4.0K 11月 21 15:46 Dropbox
drwxr-xr-x 2 mogeko mogeko  20K 10月 27 19:06 Music
drwxr-xr-x 3 mogeko mogeko 4.0K 11月  9 11:58 Pictures
drwxr-xr-x 2 mogeko mogeko 4.0K 10月 27 10:30 Public
drwxrwxr-x 3 mogeko mogeko 4.0K 10月 26 19:45 Steam
drwxr-xr-x 2 mogeko mogeko 4.0K 10月 27 10:30 Templates
drwxr-xr-x 2 mogeko mogeko 4.0K 11月 20 21:29 Videos

ls 也可以查看指定目录下的文件:

$ ls /etc/apt
apt.conf.d     sources.list      sources.list.d     trusted.gpg
preferences.d  trusted.gpg.d

或者使用通配符

$ ls *.yaml
cangjie5.schema.yaml            luna_pinyin.extended.dict.yaml
default.custom.yaml             luna_pinyin.extra_hanzi.dict.yaml
default.yaml                    luna_pinyin_fluency.schema.yaml
installation.yaml               luna_pinyin.kaomoji.dict.yaml
luna_pinyin.cn_en.dict.yaml     luna_pinyin.schema.yaml
luna_pinyin.computer.dict.yaml  luna_pinyin_simp.schema.yaml
luna_pinyin.custom.yaml         luna_pinyin_tw.schema.yaml
luna_pinyin.email.dict.yaml     symbols.yaml
luna_pinyin.emoji.dict.yaml     user.yaml
luna_pinyin.english.dict.yaml

想要查看隐藏文件?加个 -a 就可以了:

ls -a
.   archetypes   content  .gitignore  public     resources  themes
..  config.toml  .git     LICENSE.md  README.md  static     .travis.yml

ls 还可以用来在无聊时打发时间😂😂

在终端中执行以下命令,然后看着屏幕滚就可以了;在一下比较大型的系统中,可以滚一两个小时呢!!

ls -R /

看腻了可以用 Ctrl + C 强制中断执行 | ・ω・’)

更多与 ls 相关的选项,可以查看 ls 的文档,通过以下命令查看

man ls

tree

如果你想以更加直观的方式查看目录结构,tree 是个不错的选择。

一般的 GNU/Linux 发行版上默认是没有安装 tree 的,我们先使用包管理器安装 tree

Archlinux

pacman -S tree

Ubuntu / Debian

sudo apt-get install tree

Fedora / CentOS

sudo yum install tree

如果不带任何参数的运行 tree,将会从当前目录开始,遍历当前目录下的所有子目录,形成一个树状图。想这样:

$ tree
.
├── input.conf
├── mpv.conf
├── mpv_sub-delay.json
├── scripts
│   ├── autoload.lua
│   ├── find_subtitles.lua
│   └── save-sub-delay.lua
└── watch_later
    ├── 0E8222A71582842B0AE77E97F92C8ADF
    ├── 3711F58064794A225929BB4E40406BB0
    ├── 64DE4D53E1D5133254D3566CB3DFE548
    ├── BB76733FFBAC24FA381FA1C04452948E
    ├── D1EB1EE7CC315044D40B56E68B717219
    └── E45A1D2ED916D7DFD4109ADFD1E4A829

2 directories, 12 file

这个命令非常有用,特别是对于我们这些 Bloger 来说;比如以下场景:

简单讲解一下各个文件的作用

.
├── Atom # 供单独使用的脚本
│   ├── Office_2016
│   │   ├── Office_Project_Pro.cmd # 将零售版的 Office Project Plus 转换为批量授权版, 然后激活
│   │   ├── Office_Project_Std.cmd # 将零售版的 Office Project 转换为批量授权版, 然后激活
│   │   ├── Office_Retail2VOL+Activate.cmd # 将零售版的 Office 转换为批量授权版, 然后激活
│   │   ├── Office_Retail2VOL_Only.cmd # 仅仅将零售版的 Office 转换为批量授权版, 不激活
│   │   ├── Office_Visio_Pro.cmd # 将零售版的 Office Visio Plus 转换为批量授权版, 然后激活
│   │   ├── Office_Visio_Std.cmd # 将零售版的 Office Visio 转换为批量授权版, 然后激活
│   │   ├── Office_VOL_Activate.cmd # 激活批量授权版的 Office
│   │   └── 查看 Office 状态.cmd
│   ├── Office_2013
│   │   ├── Office_2016 同理, 就不单独介绍了
│   ├── Office_2010
│   │   ├── Office_2016 同理
│   └── Windows_Activate.cmd # 激活批量授权版的 Windows
├── KMS 服务可用性测试.url # 检测 KMS 服务器是否挂了
├── README.md
└── Run.cmd# 激活脚本

对于那些需要介绍每个文件的功能的场景,tree 简直是神器好不好!!

扯远了 | ・ω・’)


如果不想列地太多,可以使用 -L [数字] 选项来指定查找的层数,例如:

$ tree -L 1
.
├── input.conf
├── mpv.conf
├── mpv_sub-delay.json
├── scripts
└── watch_later

2 directories, 3 files

你也可以显示指定目录的树状图:

$ tree ~/.config/mpv
.
├── input.conf
├── mpv.conf
├── mpv_sub-delay.json
├── scripts
│   ├── autoload.lua
│   ├── find_subtitles.lua
│   └── save-sub-delay.lua
└── watch_later
    ├── 0E8222A71582842B0AE77E97F92C8ADF
    ├── 3711F58064794A225929BB4E40406BB0
    ├── 64DE4D53E1D5133254D3566CB3DFE548
    ├── BB76733FFBAC24FA381FA1C04452948E
    ├── D1EB1EE7CC315044D40B56E68B717219
    └── E45A1D2ED916D7DFD4109ADFD1E4A829

2 directories, 12 file

如果需要列出的是一个很大的树状图,可以配合 less 使用:

tree | less

同样的,要查看更多关于 tree 的信息:

man tree

find

如果不知道文件在哪里怎么办呢?总不能从 / 目录开始遍历吧!这时你需要 find

如果不加任何参数的运行 find,它将会递归列出改目录下的所有文件和目录:

$ find
.
./mpv_sub-delay.json
./scripts
./scripts/find_subtitles.lua
./scripts/autoload.lua
./scripts/save-sub-delay.lua
./mpv.conf
./watch_later
./watch_later/E45A1D2ED916D7DFD4109ADFD1E4A829
./watch_later/3711F58064794A225929BB4E40406BB0
./watch_later/0E8222A71582842B0AE77E97F92C8ADF
./watch_later/64DE4D53E1D5133254D3566CB3DFE548
./watch_later/BB76733FFBAC24FA381FA1C04452948E
./watch_later/D1EB1EE7CC315044D40B56E68B717219
./input.conf

但是 find 真正强大的地方在于你可以使用文件名进行搜索:

$ find -name autoload.lua
./scripts/autoload.lua

或是使用通配符

$ find -name *.lua
./scripts/find_subtitles.lua
./scripts/autoload.lua
./scripts/save-sub-delay.lua

你也可以根据文件大小进行搜索 (对于硬盘空间不足的时候特别有用)

列出所有大于 1 G 的文件:

$ find -size +1G
./Downloads/Asura.2012.BluRay.1080p.x264-MySiLU [PublicHD]/Asura.2012.BluRay.1080p.x264.AC3-MySilu.mkv
./Downloads/Starship.Troopers.Traitor.of.Mars.2017.720p.WEB-DL.DD5.1.H264-FGT/Starship.Troopers.Traitor.of.Mars.2017.720p.WEB-DL.DD5.1.H264-FGT.mkv

也可以搜索具体的文件目录,例如我们想在 .config/mpv 目录中查找所有后缀为 .lua 的文件:

$ find .config/mpv -name *.lua
.config/mpv/scripts/find_subtitles.lua
.config/mpv/scripts/autoload.lua
.config/mpv/scripts/save-sub-delay.lua

更多的信息可以查看 man 手册

man find