perl 打印目录结构
#!/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 打印目录结构的更多相关文章
- Python树形打印目录结构
前言 这两天整理数据文件的时候发现,一层层的点击文件夹查看很繁琐,于是想写一个工具来递归打印出文件目录的树形结构,网上找了一些资料几乎都是使用的os.walk, 调试了以后发现返回的貌似的是一个“生成 ...
- 递归打印目录层次(java版)
import java.io.File; public class Test { /** * * @param fileDir 根目录 * @param num 递归层次 */ private sta ...
- CentOS6.5菜鸟之旅:纯转载Linux目录结构
来自:http://www.iteye.com/topic/1125162 使用linux也有一年多时间了 最近也是一直在维护网站系统主机 下面是linux目录结构说明 本人使用的是centos系 ...
- Centos目录结构详细版
使用linux也有一年多时间了 最近也是一直在维护网站系统主机 下面是linux目录结构说明 本人使用的是centos系统,很久没有发表博文了 近期会整理自己所用所了解知识点,发表linux相关的 ...
- CentOS目录结构超详细版
最近初学Linux 对linux的目录产生了很多疑问,看到这篇文章,让我顿时对目录有了一个清晰的认识!推荐给大家! ------------------------------------------ ...
- Linux目录结构【转】
使用linux也有一年多时间了 最近也是一直在维护网站系统主机 下面是linux目录结构说明 本人使用的是centos系统,很久没有发表博文了 近期会整理自己所用所了解知识点,发表linux相关的 ...
- 【Linux笔记】Linux目录结构
[Linux笔记]Linux目录结构 本文内容整理自网络,以作参考. /:根目录,位于linux文件系统目录结构的顶层,一般根目录下只存放目录,不要存放文件,/etc./bin./dev./lib ...
- (大数据工程师学习路径)第一步 Linux 基础入门----目录结构及文件基本操作
Linux 目录结构及文件基本操作 介绍 1.Linux 的文件组织目录结构. 2.相对路径和绝对路径. 3.对文件的移动.复制.重命名.编辑等操作. 一.Linux 目录结构 在讲 Linux 目录 ...
- Centos7的目录结构
CentOS 目录结构 : /: 根目录,一般根目录下只存放目录,不要存放文件,/etc./bin./dev./lib./sbin应该和根目录放置在一个分区中/bin:/usr/bin: 可执行二进制 ...
随机推荐
- LOJ10064黑暗城堡
题目描述你知道黑暗城堡有 N 个房间,M 条可以制造的双向通道,以及每条通道的长度. 城堡是树形的并且满足下面的条件: 设 Di 为如果所有的通道都被修建,第 i 号房间与第 1 号房间的最短路径长 ...
- java创建线程的多种方式
java创建线程的四种方式 1.继承 Thread 类 通过继承 Thread 类,并重写它的 run 方法,我们就可以创建一个线程. 首先定义一个类来继承 Thread 类,重写 run 方法. 然 ...
- 某商城系统(V1.3-2020-01-10)前台命令执行漏洞
漏洞文件: ./inc/module/upload_img.php 先跟进 del_file 函数: 在 del_file 函数中首先执行了unlink操作,然后接着进行了file_exists 判断 ...
- (一)Spring Boot 常用注解
文章目录 一.注解(annotations)列表 二.注解(annotations)详解 三.JPA注解 四.SpringMVC相关注解 五.全局异常处理 @ExceptionHandler(Exce ...
- 十:SpringBoot-配置AOP切面编程,解决日志记录业务
SpringBoot-配置AOP切面编程,解决日志记录业务 1.AOP切面编程 1.1 AOP编程特点 1.2 AOP中术语和图解 2.SpringBoot整合AOP 2.1 核心依赖 2.2 编写日 ...
- Spring5源码,@ModelAttribute
一.什么是@ModelAttribute注解 二.@ModelAttribute注解相关代码详解 一.什么是@ModelAttribute注解 @ModelAttribute注解主要用来将请求转换为使 ...
- Mysql容器启动失败-解决方案
在看问题之前首先熟悉几个命令 相关命令 1.docker attach 连接到正在运行中的容器: 命令:docker attach --sig-proxy=false mynginx 2.docker ...
- CCF CSP 202009-1 称检查点查询
202009-1 称检查点查询 题目背景 2020年6月8日,国务院联防联控机制发布<关于加快推进新冠病毒核酸检测的实施意见>,提出对"密切接触者"等八类重点人群&qu ...
- Pytest(3)fixture的使用
fixture的优势 Pytest的fixture相对于传统的xUnit的setup/teardown函数做了显著的改进: 命名方式灵活,不局限于 setup 和teardown 这几个命名 conf ...
- django开发东京买菜,全栈项目,前端vue,带手机GPS精准定位,带发票系统,带快递系统,带微信/支付宝/花呗/银行卡支付/带手机号一键登陆,等等
因为博客园不能发视频,所以,完整的视频,开发文档,源码,请向博主索取 完整视频+开发文档+源码,duanshuiLu.com下载 vue+django手机购物商城APP,带支付,带GPS精准定位用户, ...