Linux Shell Scripting Cookbook(Third Edition)
上QQ阅读APP看书,第一时间看更新

Generating a tree view of a directory.

Sometimes it's easier to visualize a file system if it's presented graphically.

The next recipe pulls together several of the tools we discussed. It uses the find command to generate a list of all the files and sub-folders under the current folder.

The -exec option creates a subshell which uses echo to send the filenames to the tr command's stdin. There are two tr commands. The first deletes all alphanumeric characters, and any dash (-), underbar (_), or period (.). This passes only the slashes (/) in the path to the second tr command, which translates those slashes to spaces. Finally, the basename command strips the leading path from the filename and displays it.

Use these to view a tree of the folders in /var/log:

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

This output is generated:

mail
  statistics
gdm
  ::0.log
  ::0.log.1
cups
      error_log
      access_log
  ... access_l