在 Linux 下工做,打交道最多的就是文件了,毕竟 Linux 下工做一切皆文件嘛。Linux 也为你们提供了多种用于处理文件的命令,合理使用这些命令能够大大节省你的时间,并让咱们的工做负担再也不那么沉重。linux
当咱们查找文件时,第一时间想到的确定是 find 命令。可是若是咱们搜索的路径范围比较大时,花费的时间会比较多,在这个状况下 find 命令就不是最优的方式了。面试
咱们可使用 ls 快速找到近期更新的文件。好比,想知道本身昨天离开办公室回家前调用的脚本吗?小case嘛!使用 ls 命令并加上 -ltr
选项。最后一个列出的将是最近建立或更新的文件。spa
$ 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复制代码
若是咱们仅仅想列出今天更新的文件,能够这样操做:.net
$ 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 命令的输出结果可能会比较多,咱们可使用它的一些选项来过滤掉本身不想要的结果。命令行
好比,在下面的命令中,咱们不搜索以点开头的目录(即隐藏目录),指定咱们要查找的是文件而不是目录,并要求仅显示最近一天更新过的文件。code
命令以下:cdn
$ find . -not -path '*/\.*' -type f -mtime -1 -ls
917517 0 -rwxrw-r-- 1 shs shs 683 Sep 23 11:00 ./newscript复制代码
注意 -not
选项反转了 -path 的行为,所以咱们不会搜索以点开头的子目录。blog
若是咱们只想查找最大的文件和目录,那么可使用相似 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' *复制代码