#!/usr/bin/perl

# 递归打印目录结构

use v5.26;
use strict;
use utf8;
use autodie;
use warnings;
use Encode qw(decode encode);
use File::Spec::Functions;
use File::Basename;
use experimental 'smartmatch'; # 忽略智能匹配的错误警告
use Getopt::Long qw(GetOptions);
use Term::ANSIColor; # 递归目录结构的次数, 0全部递归
my $depath = 0;
my $help;
my $ignores; GetOptions (
"depath=i" => \$depath,
"ignores=s" => \$ignores,
"help" => \$help
); if(defined($help)){
print color('green');
say encode('utf-8', "
\t\$ atree [dir=./] [--ignores=./.atree] [--depath=0]
\t\$ atree
\t\$ atree ./lib
\t\$ atree ./lib --depath 1
\tor
\t\$ atree ./lib -d 1
\t\$ atree -i ~/.atree -d 3
");
exit;
} my $dirPath = $ARGV[0] // "./";
unless(-d -e $dirPath){
print color("red");
say encode('utf-8', "$dirPath 不是目录,或则不存在!!");
exit;
} my $ignoresFileName = ".atree";
my $ignoresPath = $ignores // catfile($dirPath, $ignoresFileName); # 默认忽视这些目录
my @ignores = (); # 读取忽略文件
sub readIgnores {
if(defined($ignoresPath) && -e $ignoresPath){
my $fh;
open $fh, "<", $ignoresPath;
while(<$fh>){
chomp;
$_ =~ s/^\s+|\s+$//g;
next if /^#/;
push @ignores, $_;
}
close $fh;
}
}
readIgnores(); sub scan {
my ($dir, $dep, $depathCount) = @_;
if($dir && -d -e $dir) {
my @files = <$dir/* $dir/.[!.]*>;
$depathCount++;
for(@files){
# next if /\.{1,2}$/g;
my $p = catfile($_);
if(-d $p){
my($filename) = fileparse($p);
unless($filename ~~ @ignores){
say "$dep$filename/";
if($depath eq 0 or $depathCount lt $depath){
scan($p, "| ".$dep."", $depathCount);
}
}
}else {
my($filename) = fileparse($p);
say "$dep$filename";
}
}
};
} scan($dirPath, "|-- ", 0);
λ atree -i ~/.atree -d 3
|-- analysis_options.yaml
|-- bin/
| |-- main.dart
|-- CHANGELOG.md
|-- lib/
| |-- dart_demo.dart
|-- pubspec.lock
|-- pubspec.yaml
|-- README.md
|-- result.html
|-- test/
| |-- dart_demo_test.dart
|-- .dart_tool/
| |-- build/
| | |-- 098d3ee73e6cc294616d3a2e2c3c81ad/
| | |-- entrypoint/
| | |-- generated/
| |-- pub/
| | |-- bin/
|-- .gitignore
|-- .local-chromium/
| |-- 672088/
| | |-- chrome-win/
|-- .packages λ cat ~/.atree
.git
node_modules

perl 打印目录结构的更多相关文章

  1. Python树形打印目录结构

    前言 这两天整理数据文件的时候发现,一层层的点击文件夹查看很繁琐,于是想写一个工具来递归打印出文件目录的树形结构,网上找了一些资料几乎都是使用的os.walk, 调试了以后发现返回的貌似的是一个“生成 ...

  2. 递归打印目录层次(java版)

    import java.io.File; public class Test { /** * * @param fileDir 根目录 * @param num 递归层次 */ private sta ...

  3. CentOS6.5菜鸟之旅:纯转载Linux目录结构

    来自:http://www.iteye.com/topic/1125162 使用linux也有一年多时间了  最近也是一直在维护网站系统主机  下面是linux目录结构说明 本人使用的是centos系 ...

  4. Centos目录结构详细版

    使用linux也有一年多时间了  最近也是一直在维护网站系统主机  下面是linux目录结构说明 本人使用的是centos系统,很久没有发表博文了 近期会整理自己所用所了解知识点,发表linux相关的 ...

  5. CentOS目录结构超详细版

    最近初学Linux 对linux的目录产生了很多疑问,看到这篇文章,让我顿时对目录有了一个清晰的认识!推荐给大家! ------------------------------------------ ...

  6. Linux目录结构【转】

    使用linux也有一年多时间了  最近也是一直在维护网站系统主机  下面是linux目录结构说明 本人使用的是centos系统,很久没有发表博文了 近期会整理自己所用所了解知识点,发表linux相关的 ...

  7. 【Linux笔记】Linux目录结构

    [Linux笔记]Linux目录结构   本文内容整理自网络,以作参考. /:根目录,位于linux文件系统目录结构的顶层,一般根目录下只存放目录,不要存放文件,/etc./bin./dev./lib ...

  8. (大数据工程师学习路径)第一步 Linux 基础入门----目录结构及文件基本操作

    Linux 目录结构及文件基本操作 介绍 1.Linux 的文件组织目录结构. 2.相对路径和绝对路径. 3.对文件的移动.复制.重命名.编辑等操作. 一.Linux 目录结构 在讲 Linux 目录 ...

  9. Centos7的目录结构

    CentOS 目录结构 : /: 根目录,一般根目录下只存放目录,不要存放文件,/etc./bin./dev./lib./sbin应该和根目录放置在一个分区中/bin:/usr/bin: 可执行二进制 ...

随机推荐

  1. 大数据开发-Spark-拷问灵魂的5个问题

    1.Spark计算依赖内存,如果目前只有10g内存,但是需要将500G的文件排序并输出,需要如何操作? ①.把磁盘上的500G数据分割为100块(chunks),每份5GB.(注意,要留一些系统空间! ...

  2. (五)整合 Swagger2 ,构建接口管理界面

    整合 Swagger2 ,构建接口管理界面 1.Swagger2简介 1.1 Swagger2优点 1.2 Swagger2常用注解 2.SpringBoot整合Swagger2 2.1 Swagee ...

  3. js部分知识整理,google浏览器的代码调试

    整理一些学过的js知识点,包括js中3个括号的含义,this的使用,递归,google浏览器的代码调试.Location的属性及常用方法,window对象常用方法,open方法等. js括号 在js中 ...

  4. jQuery——操作DOM

    所谓Web体验,就是Web服务器与Web浏览器之间的合作.过去,都是由服务器生成HTML文档,然后浏览器负责解释并显示该文档.后来,我们可以用CSS技术来动态修改页面的外观. ###操作属性 jQue ...

  5. Kafka踩坑填坑记录

    Kafka踩坑填坑记录 一.kafka通过Java客户端,消费者无法接收消息,生产者发送失败消息 二. 一.kafka通过Java客户端,消费者无法接收消息,生产者发送失败消息 在虚拟机上,搭建了3台 ...

  6. HarmonyOS三方件开发指南(8)——RoundedImage

    [小年答谢,新春送礼]免费抽取1000元京东卡+更多新春好礼~查看详情>>> 目录: 1. RoundedImage组件功能介绍 2. RoundedImage使用方法 3. Rou ...

  7. 和我一起理解js中的事件对象

    我们知道在JS中常用的事件有: 页面事件:load: 焦点事件:focus,blur: 鼠标事件:click,mouseout,mouseover,mousemove等: 键盘事件:keydown,k ...

  8. 翻译:《实用的Python编程》01_Introduction_00_Overview

    目录 | 下一节 (2 处理数据) 1. Python 简介 本章是第一章,将会从头开始介绍 Python 基础知识,让你从零开始,学会怎么编写.运行.调试一个简单的程序.最后,你可以运用这些 Pyt ...

  9. Kuroni and the Punishment CodeForces - 1305F 随机函数mt19937 + 质因子分解

    题意: 给你n个数,你每次操作可以对一个数加1或者减1,让你求你最少需要操作多少次可以使这n个数的公因子大于1 题解: 正常方法就是枚举质因子(假设质因子为x),然后对于这个数组中的数a[i],让a[ ...

  10. 牛客练习赛71 C.数学考试 (DP,容斥原理)

    题意:RT 题解:先对\(p\)排个序,然后设\(dp[i]\)表示前\(i-1\)个\(p[i]\)满足条件但是\(p[i]\)不满足,即在\([1,p[i]]\)中不存在从\(p[1]\)到\(p ...