Shell 检查目录以及其中的文件与子目录

Shell 检查目录以及其中的文件与子目录,我们处理得最多的一个问题就是查找放错地方的文件并整理凌乱的文件层次结构。本章中,我们会讲到检查部分文件系统并展现其内容的一些技巧。

Shell检查目录以及其中的文件与子目录

预备知识

我们之前讨论过的find命令以及循环能够帮助检查并报告目录及其内容。

实战演练

有两种方法可以检查目录。一种方法是将目录层次以树状形式显示出来,另一种方法是生成目录下所有文件和子目录的汇总信息。

  1. 生成目录的树状视图

有时候,如果文件系统以图形化形式呈现,会更容易形成直观的印象。

接下来的例子中综合运用了我们讲过的多种工具。其中使用find命令生成了当前目录下所有文件及子目录的列表。

-exec选项创建了一个子shell,在这个子shell中使用echo命令将文件名发送给tr命令的stdin。这里用到了两个tr命令。第一个tr删除了所有的字母数字字符、连字符(-)、下划线(_)和点号(.),只将路径中的斜线(/)传入第二个tr,后者将这些斜线全部转换成空格。最后,利用basename命令去掉文件名前的路径部分并将结果显示出来。
下面来查看目录/var/log的树状视图:

$ cd /var/log
$ find . -exec sh -c 'echo -n {} | tr -d "[:alnum:]_.\-" | \
    tr "/" " "; basename {}' \;

生成如下输出:

mail
  statistics
gdm
  ::0.log
  ::0.log.1
cups
      error_log
      access_log
  ... access_l
  1. 生成文件及子目录的汇总信息

我们可以结合findechowc生成子目录列表以及其中的文件数量。下面的命令可以获得当前目录下文件的汇总信息:

for d in `find . -type d`;
  do
  echo `find d -type f | wc -l` files ind;
done

如果在/var/log下执行该脚本,会生成如下输出:

103 files in .
17 files in ./cups
0 files in ./hp
0 files in ./hp/tmp

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程