在 Linux 下工作,打交道最多的就是文件了,毕竟 Linux 下工作一切皆文件嘛。Linux 也为大家提供了多种用于处置文件的命令,合理运用这些命令能够大大俭省你的时间,并让我们的工作担负不再那么繁重。

寻觅文件的技巧
当我们查找文件时,第一时间想到的肯定是 find 命令。但是假如我们搜索的途径范围比拟大时,破费的时间会比拟多,在这个状况下 find 命令就不是最优的方式了。

我们能够运用 ls 快速找到近期更新的文件。比方,想晓得本人昨天分开办公室回家前调用的脚本吗?小case嘛!运用 ls 命令并加上 -ltr 选项。最后一个列出的将是最近创立或更新的文件。

$ ls -ltr ~/bin | tail -3
-rwx------ 1 shs shs 229 Sep 22 19:37 checkCPU
-rwx------ 1 shs shs 285 Sep 22 19:37 ff
-rwxrw-r-- 1 shs shs 1629 Sep 22 19:37 test2
假如我们仅仅想列出今天更新的文件,能够这样操作:

$ ls -al --time-style=+%D | grep date +%D
drwxr-xr-x 60 shs shs 69632 09/23/19 .
drwxrwxr-x 2 shs shs 8052736 09/23/19 bin
-rw-rw-r-- 1 shs shs 506 09/23/19 stats
假如我们想要查找的文件可能不在当前目录中,那么 find 将比 ls 愈加灵敏强大。但是,find 命令的输出结果可能会比拟多,我们能够运用它的一些选项来过滤掉本人不想要的结果。

比方,在下面的命令中,我们不搜索以点开头的目录(即躲藏目录),指定我们要查找的是文件而不是目录,并请求仅显现最近一天更新过的文件。

命令如下:

$ find . -not -path '/.' -type f -mtime -1 -ls
917517 0 -rwxrw-r-- 1 shs shs 683 Sep 23 11:00 ./newscript
留意 -not 选项反转了 -path 的行为,因而我们不会搜索以点开头的子目录。

假如我们只想查找最大的文件和目录,那么能够运用相似 du 这样的命令,它会按大小列出当前目录的内容。然后,再将输出的内容经过管道传输到 tail 命令,仅查看最大的几个。

$ du -kx | egrep -v "./.+/" | sort -n | tail -5
918984 ./reports
1053980 ./notes
1217932 ./.cache
31470204 ./photos
39771212 .
-k 选项让 du 以块列出文件大小,而 x 可避免其遍历其他文件系统上的目录(例如,经过符号链接援用)。命令运转后,du 命令会先列出文件大小,然后再调用 sort -n 来依照大小排序。

统计文件数量的技巧
运用 find 命令能够很容易地计数任何特定目录中的文件。不过大家要留意的是,find 会递归到子目录中,并将这些子目录中的文件与当前目录中的文件一同计数。

比方,我们想计数一个特定用户(alvin)的主目录中的文件,我们能够先用 find 命令找到文件,再用 wc 命令停止统计。

$ find /home/alvin -type f 2>/dev/null | wc -l
35624
请留意,我们将 find 命令的错误输动身送到 /dev/null,为了防止搜索相似 ~/.cache 这类无法搜索并且对它的内容也不感兴味的文件夹。

必要时,我们能够运用 -maxdepth 1 选项将 find 搜索范围限制在单个目录中,或者也能够将其设置为本人想要搜索的深度:

$ find /home/alvin -maxdepth 1 -type f | wc -l
387
文件重命名的技巧
运用 mv 命令能够很容易地重命名一个文件,但是有时我们想重命名大量文件,并且不想破费大量时间,要怎样操作呢?这个时分 rename 命令就要派上用场了。

例如,我们想要将当前目录下一切文件的文件名中含有空格的全部更改为下划线,大家能够运用如下命令:

$ rename 's/ /_/g' *
大家应该能想到,此命令行中的 g 代表「全局」。这就意味着该命令会将文件名中的一切空格更改为下划线,而不只仅是第一个。

假如我们想要把文本的文件删除掉 .txt 扩展名,能够运用如下命令:

$ rename 's/.txt//g' *