模拟tree命令
tree就是把文件和目录按树形列出。这很有趣,可Cygwin里没有这个包。于是,我编写了一个脚本,模拟一下tree的基本功能。
Code
#!/bin/bash
# TREE Tool for Cygwin
# Functions
lines() {
line=
for t in `eval echo {0..$level}`;do
line="${line}\t|"
done
}
list_files() {
files=(.* *)
for file in ${files[@]};do
if [ ! "$file" = '.' -a ! "$file" = '..' -a ! "$file" = '*' ];then
if [ -d "$file" ];then
echo -e "${line}\e[34;1m$file\e[0m/"
change_dir
elif [ -L "$file" ];then
echo -e "${line}\e[36;1m$file\e[0m@"
elif [ -x "$file" ];then
echo -e "${line}\e[32;1m$file\e[0m*"
else
echo -e "${line}$file"
fi
fi
done
}
change_dir() {
cd "$file"
((level++))
lines
list_files
cd ..
((level--))
lines
}
#Start
#init
t=0
level=0
lines
cd "$*"
echo "$PWD"
list_files
exit
原理
转到\$*所指示的目录后,显示所有文件,包括隐藏文件,并对可执行文件、链接文件、目录标上标记,如果是目录,就进入,继续执行这些步骤,并进行适当的缩进,目录全部显示后,退回上级目录,并减少缩进,直到全部文件被显示。
将此文件放在/usr/local/bin
下,进行适当的命名,如rtree
,设置可执行权限(如果需要),即可使用。
建议
请不要打印/proc
等特殊目录,会进入死循环。
其他
运行中按Ctrl-c可终止。